簡體   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