[英]Questions about Java constructor, for class and its super class
我试图找出构造函数在以下程序中的工作方式。 基本上,有一个扩展Player
类的Seeker
类和一个包含Seeker
对象的Game
类,如下面的代码所示。
我的问题是,当Game
类使用mySeeker = new Seeker( "Sally", this );
实例化mySeeker
mySeeker = new Seeker( "Sally", this );
this
调用玩家的构造函数吗? 如果是这样,它在哪里传递了游戏名称? 我在Player
的构造函数中看到了Game g
,但是我无法弄清楚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”引用是指Game类的实例。 游戏类将自身借给搜索者/玩家类,因此搜索者/玩家类可以访问游戏类中的数据。
编辑:正在将“寻求”移交给“游戏”的“此”实例,并使用“超级”命令将数据传递给它的继承的“玩家”
我的问题是,当
Game
类mySeeker using
mySeeker = new Seeker(“ Sally”,this)实例化mySeeker using
;does ``this
调用玩家的构造函数吗?
没有。
Player
构造函数>> is <<被调用,但不是因为this
。 在该语句来自的上下文中, this
将表示一个Game
实例。 它只是“一个参数”,被传递给Seeker
构造函数。
Player constructor is being invoked in the
Seeker`构造函数中Player constructor is being invoked in the
函数; 特别是这一行:
super( new Point( 0, 0 ), n, g );
发生的情况是,当您new
Seeker
,将调用Seeker
构造函数,并通过super
调用立即调用Player
构造函数。
如果是这样,它在哪里传递了游戏名称?
上面的行是将Game
对象传递给Player
。 看到g
参数了吗? 与this
传递的Game
对象相同。
(您显示给我们的代码不支持游戏的“名称”。传递的是引用。当您将新的Game
实例分配给myGame
,它不是“游戏的名称”。 myGame
变量就是那个变量,可以包含对某些 Game
对象的引用。)
Seeker
将使用名称和Game
对象实例化。 传递this
只是对当前对象的引用。 该Seeker
将与已经创建创建Game
对象意味着Seeker
可以从访问数据Game
对象。
mySeeker = new Seeker( "Sally", this )
上面的代码分配了一个Seeker对象,然后执行其构造函数以初始化其值,然后为变量mySeeker分配了对新Seeker对象的引用。
用两个参数调用构造函数:字符串和this 。 这是指正在执行上述代码的当前对象,在这种情况下,它是指正在构造的Game对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.