2013-08-03 195 views
0

在此代碼中,我只分配一個對象,但在某些方面,我存儲了2個x副本(一個用於基類,另一個用於子類)。如果對象只有一個,它怎麼可能?發現存儲兩個x變量的空間在哪裏?這是否意味着實際上創建了兩個對象?存儲兩個具有相同名稱的變量的對象

class App { 

    class Base { 
     public int x; 

     public Base() { 
      x = 2; 
     } 

     int method() { 
      return x; 
     } 
    } 

    class Subclass extends Base { 
     public int x; 

     public Subclass() { 
      x = 3; 
     } 

     int method() { 
      return x; 
     } 
    } 

    public static void main(String[] args) { 
     new App().run(); 
    } 

    public void run() { 
     Base b = new Subclass(); 
     System.out.println(b.x); 
     System.out.println(b.method()); 
    } 
} 

回答

3

其中一個x屬於超類,另一個屬於子類。他們具有相同的名稱,這一事實並不那麼重要,你可以通過使用類資格的訪問表達式訪問兩個:

((Base)b).x 
((Subclass)b).x 

(注意,在第一線的轉換是沒有必要的,我已經把它在對稱)

0

在java中你不能超載variables。,雖然他們是同名的,但他們的類是不同的。

0

根據此tutorial(在「子類中可以做什麼」部分),當您在子類中聲明與超類中的字段相同的字段時,在此例中爲x,超類將被隱藏,這意味着子類中實際上有兩個x,一個是它自己的,另一個是它的超類,只有同名的x。您可以使用derivedObject.x以及子類中使用((Base)derivedObject).x(或派生類中的super.x)引用派生類中的那個

相關問題