2017-09-17 79 views
0

如果我有一類魚父母和孩子相同的變量名,繼承

public class Fish { 
int numberOfFins; 
int age; 
public Fish(int age){ 
    this.age=age; 

}} 

和一流的鯊魚,它擴展了魚類

public class Shark extends Fish{ 
private int age; 

public Shark(int age) { 
    super(age); 
    this.age=age; 
}} 

什麼年齡變量被訪問的低谷關鍵字這一點 - 是它父母或孩子班?

在此先感謝?

+0

**強**推薦使用任何幾種典型的縮進和支架放置方式,**不要**上面的縮進和支架放置。我在回答中使用了其中的一個標準。 –

回答

-1

this

在實例方法或構造,this是 參考當前對象 - 其方法或構造是被 調用的對象。

public Fish(int age){ 
    this.age=age;/the one is Fish 
} 

同樣在其他類中,具有相同名稱的成員,這將在其c'tor引用:

public Shark(int age) { 
    super(age); 
    this.age=age; // the one in class Shark 
} 
+0

downvote的原因? – nullpointer

0

年齡將從魚,但因爲你可以inhereted將另一個名稱爲「age」的變量進行decal變量被隱藏的變量將被隱藏,因此您將在當前對象中引用的內容是由Shark所聲明的變量

0

其中您訪問210取決於您使用訪問它的東西的類型this始終具有類的類型的方法或構造屬於  —即在Fish的方法/構造,thisFish類型。在Shark'的方法/構造函數中,this的類型爲Shark。 (這裏只有一個對象,它結合了FishShark [沒錯,它確實有兩個名稱相同的單獨的字段]的特徵;我們談論的是對它的引用類型。)

(注意,這是不同實例變量(如age;又名「田」),比它是實例方法在Java中,方法是多態的,實例變量都沒有。)

左右的時間內Fish代碼, this.ageFishage。在Shark代碼中,this.ageShark的代碼age

例如爲:

public class Fish { 
    int numberOfFins; 
    int age; 
    public Fish(int age) { 
     this.age=age;   // Sets Fish#age 
    } 
} 

public class Shark extends Fish { 
    private int age; 

    public Shark(int age) { 
     super(age); 
     this.age=age;   // Sets Shark#age 
    } 
} 

這並不只適用於this,它適用於變量爲好。看看下面main(並注意我設置兩個age s到不同的值; Sharkage兩倍Fishage):當你出現在Java中,FWIW我要開始了

class Fish { 
    int numberOfFins; 
    int age; 
    public Fish(int age) { 
     this.age = age;   // Sets Fish#age 
    } 
} 

public class Shark extends Fish { 
    private int age; 

    public Shark(int age) { 
     super(age); 
     this.age = age * 2;  // Sets Shark#age 
    } 

    public static void main(String[] args) { 
     Shark s = new Shark(10); 
     Fish f = s; 
     System.out.println(f.age); // 10 
     System.out.println(s.age); // 20 
    } 
}