2014-08-01 1 views
0

Я пытаюсь выяснить, как работают конструкторы в следующей программе. В основном существует класс 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(); 
} 
+0

'this' - это просто ссылка на текущий объект. Поэтому, когда вы вызываете «новый Seeker» («Sally», this); ', вы передаете текущий объект Game в качестве второго параметра. – August

ответ

0

Мой вопрос, когда Game класс экземпляр mySeeker using mySeeker = новый Искатель («Салли», это); does ``this вызывать конструктор игрока?

No.

The Player конструктору >> является < < быть вызван, но не из-за this. В контексте, откуда поступают эти утверждения, this будет обозначать экземпляр Game. Это «просто параметр», который передается в конструктор Seeker.

Player constructor is being invoked in the Искатель `конструктор; в частности, эта линия:

super(new Point(0, 0), n, g); 

Что происходит, что когда вы new в Seeker, то Seeker вызывается конструктор, и он сразу же вызывает Player конструктор, с помощью super вызова.


Если да, то откуда он проходит на название игры?

Линия, выше которой находится объект Game, передается Player.См. Параметр g? Это же Game объект который вы прошли как this.

(Код, который вы нам указали, не поддерживает «имя» для игры. То, что передается, является ссылкой. И когда вы назначаете новый Game экземпляр myGame, это не «имя игра». переменная myGame просто, что ... переменная ..., которая может содержать ссылку на некоторыйGame объект.)

0

Ссылка «this» относится к экземпляру класса Game. Класс игры предоставляет себя классу seeker/player, поэтому класс seeker/player может получить доступ к данным из игрового класса.

редактировать: «Поиск» в настоящее время передан «этот» пример «игры» и с помощью команды «супер», чтобы передать данные наследуется «игрок»

0

Seeker получает экземпляр с именем и Game объекта. Передача this - это просто ссылка на текущий объект. Seeker будет создан с уже созданным объектом Game, то есть Seeker может получить доступ к данным объекта Game.

0
mySeeker = new Seeker("Sally", this) 

Приведенные выше код выделить объект Искателя, а затем выполнить его конструктор, чтобы инициировать его значение, а затем присвоить переменную mySeeker со ссылкой на новом объекте Искателя.

Конструктор вызывается с двумя аргументами: строка и это. этот относится к текущему объекту, который выполняет вышеуказанный код, в этом случае он относится к объекту Game, который строится.