2013-07-20 64 views
0

我跑了下面的一段代碼:在子類採用超打印超類字段

class Feline { 
    public String type = "f "; 

    public Feline() { 
     System.out.print("feline "); 
    } 
} 

public class Cougar extends Feline { 
    public Cougar() { 
     System.out.print("cougar "); 
    } 

    public static void main(String[] args) { 
     new Cougar().go(); 
    } 

    void go() { 
     type = "c "; 
     System.out.print(this.type + super.type); 
    } 
} 

並認爲輸出是feline cougar c f,但讓我吃驚的輸出出來是feline cougar c c。 有人可以請解釋。

回答

2

當然 - 你只有一個type變量每Cougar的實例。它在Feline繼承Cougar宣佈。無論你在哪裏更改該變量的值,它都會在任何地方都可見(對於該對象)。

所以,如果你有在Feline另一種方法,其印刷的type的電流值,將打印c以及(你叫go()後)。

1

您還沒有編碼領域的子類:

public class Cougar extends Feline { 

    public String type = "c "; 

    // ... 
} 
+0

它不在子類 – Anand

+0

是的 - 是的 - 這就是爲什麼你沒有看到你的期望 – Bohemian

4

超類是不是一個子類的實例,這是什麼一個子類實例。您的Cougar「是」FelineFeline的所有成員都是Cougar的成員 - 相同的成員,而不是副本。超類內部沒有單獨的type - 它與子類中的成員相同,即type。您可以將其稱爲Cougar的會員或Feline的會員,都是一樣的。