2017-07-27 73 views
1

我已經研究了一些關於此主題的相關文章,並且我已經瞭解到,當我們在子類中創建相同名稱的變量時,稱爲隱藏。給定數據類型效果如何覆蓋成員變量

 

    class A { 
     int i = 10; 

     public void printValue() { 
      System.out.print("Value-A"); 
      System.out.println(i); 
     } 
    } 

    class B extends A { 
     int i = 12; 

     public void printValue() { 
      System.out.print("Value-B"); 
      System.out.println(i); 
     } 
    } 

    public class Test { 
     public static void main(String args[]) { 
      A a = new B(); 
      a.printValue(); 
      System.out.print(a.i); 
     } 
    } 

當我實例與類型A和打印部件數據 甲一個新= B級B(); System.out.println(a.i) 輸出是10.(父類成員數據的值)。

但是當我將B類實例化爲B類時, B a = new B(); System.out.println(a.i)是12.(父類成員數據的值)

我想知道它們是如何不同的。

+0

非常接近的問題https://stackoverflow.com/questions/15513467/polymorphism-with-instance-variables – agurylev

回答

1

多態性僅適用於方法。變量仍然綁定到該類型。你不能變換變量。這就是您在更改類型時看到不同輸出的原因。

簡單地說,當你寫

A a=new B(); 

只是要記住,變量綁定到左側和方法會從右側執行。

2

變量綁定到引用,而不是綁定到創建的對象。在你的例子中,A a = new B();這裏a是對A類型的變量綁定的引用。並且,創建的對象的類型爲B,方法綁定到該對象。這就是爲什麼它選擇參考變量的值。這被稱爲數據隱藏。因爲當我們在子類中創建相同的變量時,子類變量的值被隱藏在super類變量下。希望能幫助到你。

+0

是的,你是對的,它的工作。 –