Я пытаюсь выяснить, как работают конструкторы в следующей программе. В основном существует класс Seeker
, который расширяет класс Player
и класс Game
, который содержит объект Seeker
, как показано ниже.Вопросы о Java-конструкторе для класса и его суперкласса
Мой вопрос, когда Game
класс конкретизирует mySeeker
с помощью mySeeker = new Seeker("Sally", this);
делает this
вызвать конструктор игрока? Если да, то где это пропустило название игры? Я видел Game g
в конструкторе для Player
, но я не могу понять, как игра myGame
(в методе main
) была передана в Seeker
.
// класс игры
class Game {
Seeker mySeeker;
int gridSize;
Game(int gs) {
gridSize = gs;
mySeeker = new Seeker("Sally", this); //what does 'this' do here? why it does not include the name of the game?
}
void play() {
mySeeker.seek();
}
}
// Игрок класс
abstract class Player {
private Point location;
private String name;
Game game;
Player(Point p, String n, Game g) {
location = p;
name = n;
game = g;
}
// Искатель класс
class Seeker extends Player {
Seeker(String n, Game g) {
super(new Point(0, 0), n, g); // seeker starts at 0,0
}
// Основная программа
public static void main(String[] args) {
int gridSize = 3; // default value
Game myGame = new Game(gridSize);
myGame.play();
}
'this' - это просто ссылка на текущий объект. Поэтому, когда вы вызываете «новый Seeker» («Sally», this); ', вы передаете текущий объект Game в качестве второго параметра. – August