关于Java构造函数的问题,对于类及其超类

时间:2014-08-01 23:02:46

标签: java class parameters constructor super

我正在试图弄清楚构造函数在以下程序中的工作原理。基本上有一个扩展Seeker类的Player类和一个包含Game对象的Seeker类,如下面的代码所示。

我的问题是,当Game类使用mySeeker实例mySeeker = new Seeker( "Sally", this );时,this会调用播放器的构造函数吗?如果是这样,它在哪里传递了游戏的名称?我在Game g的构造函数中看到了Player,但我无法弄清楚游戏myGame(在main方法中)是如何传递给Seeker的1}}。

//游戏类

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();
   }
}

// Player class

  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();
}

4 个答案:

答案 0 :(得分:0)

" this"引用是指Game类的实例。游戏类适用于搜索者/玩家类,因此搜索者/玩家类可以访问游戏类中的数据。

编辑: "寻求"正在递交"这个" " Game"的实例并使用" super"命令将数据传递给它继承的"播放器"

答案 1 :(得分:0)

  

我的问题是,当Game类实例化mySeeker using mySeeker =新搜索者时(" Sally",这个); does ``this调用播放器&#39}构造函数?

没有

Player构造函数>>是<<被调用,但不是因为this。在语句来自的上下文中,this将表示Game实例。它只是一个参数"正在传递给Seeker构造函数。

Player constructor is being invoked in the Seeker`构造函数;特别是这一行:

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

当您new Seeker时,会调用Seeker构造函数,并通过Player立即调用super构造函数。调用


  

如果是这样,它在哪里传递了游戏名称?

上面的行是将Game对象传递给Player的位置。请参阅g参数?它与Game传递的this对象相同。

(您向我们展示的代码并不支持#34;名称&#34;用于游戏。传递的内容是参考。当您将新的Game实例分配给myGame,它不是游戏的名称&#34;。myGame变量只是......变量......可以包含对<的引用em>一些 Game对象。)

答案 2 :(得分:0)

Seeker使用名称和Game对象进行实例化。传递this只是对当前对象的引用。将使用已创建的Seeker对象创建Game,这意味着Seeker可以访问Game对象中的数据。

答案 3 :(得分:0)

mySeeker = new Seeker( "Sally", this )

上面的代码分配一个Seeker对象,然后执行它的构造函数来启动它的值,然后为变量 mySeeker 分配一个关于新Seeker对象的引用。

使用两个参数调用构造函数:字符串和 this this 指的是执行上述代码的当前对象,在这种情况下,它引用正在构造的Game对象。