2017-10-07 127 views
0

這下面的代碼給出了輸出爲:當父類對象被分配了子類對象時會發生什麼?

Output: 
    Animal 
    Dog 
    Animal 

我很困惑,爲什麼「a.type」輸出作爲「動物」連分配「A = B」之後。爲什麼這樣?

另一個觀察結果是我沒有在Dog類中聲明變量 - 「String type」。然後我得到的輸出:

Output: 
     Dog 
     Dog 
     Dog 

我的代碼:

//Parent class 
    class Animal { 
     String type; 
     public Animal(){ 
      this.type= "Animal"; 
     } 

    } 

    //Child class 
    class Dog extends Animal { 

     String type; 
     public Dog(){ 
      this.type ="Dog"; 
     } 

    } 

    //Main Class To Test 
    class TestDog{ 


      Animal a = new Animal(); 
      Dog b = new Dog();   
      Animal c = new Dog();  

      a = b; 
      System.out.println(a.type); 
      System.out.println(b.type); 
      System.out.println(c.type); 


    } 
+0

'' 「?當父類對象賦給子類的對象會發生什麼」 - *咳咳*,請理解你將一個子類對象分配給父類型***變量***。這可能看起來很挑剔,但它是一個重要的區別,並且涉及Java實現OOP和使用* reference *變量的核心。此外,父類型可能不是一個類,但可能是一個接口(「純」類型)。 –

+0

您正在爲父類和子類添加一個類型字段。別。僅將它添加到父項。讓它受到保護,或給它吸氣劑和安裝劑。 –

回答

0

首先說教點。你在你的瓷磚狀態:

當父類對象被分配子類對象時會發生什麼?

請理解您將一個子類對象分配給父類型變量。這可能看起來很挑剔,但它是一個重要的區別,並且涉及到Java如何實現OOP並使用引用變量的核心。此外,父類型可能不是一個類,但可能是一個接口(「純」類型)。

至於你的困惑,你正在爲父類和子類添加一個類型字段。不要,因爲字段沒有被覆蓋。僅將它添加到父項。讓它受到保護,或給它吸氣劑和安裝劑。

例如:

class Animal { 
    private String type; 

    public Animal() { 
     this.type = "Animal"; 
    } 

    public String getType() { 
     return type; 
    } 

    public void setType(String type) { 
     this.type = type; 
    } 

} 

// Child class 
class Dog extends Animal { 

    String type; 

    public Dog() { 
     setType("Dog"); 
    } 

} 

// Main Class To Test 
class TestDog { 
    public static void main(String[] args) { 

     Animal a = new Animal(); 
     Dog b = new Dog(); 
     Animal c = new Dog(); 

     a = b; 
     System.out.println(a.getType()); 
     System.out.println(b.getType()); 
     System.out.println(c.getType()); 
    } 

} 
+0

感謝您的回答!這清除了我的困惑。 – Sravani

相關問題