[英]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.