繁体   English   中英

有关Java构造函数(用于类及其超类)的问题

[英]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类的实例。 游戏类将自身借给搜索者/玩家类,因此搜索者/玩家类可以访问游戏类中的数据。

编辑:正在将“寻求”移交给“游戏”的“此”实例,并使用“超级”命令将数据传递给它的继承的“玩家”

我的问题是,当GamemySeeker 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM