2016-04-07 230 views
0

我新的Java和我聽不太懂一兩件事:Java對象的聲明

當我被分配到子對象(類擴展對象)聲明一個對象,它不無法訪問子對象屬性。 這是爲什麼?

比方說,我有這樣的:

public class A { 
    public int a; 
} 

public class B extends A { 
    public int b; 
} 

當我創建一個B對象是這樣的:

A object = new B(); 

我沒有訪問object.b

我被迫宣佈那樣

B object = new B(); 

我的對象是不是應該以第一種方式成爲B?

+1

您的* object *是一個B - 但是您調用該方法的* reference *可指向任何一個對象,並且僅限於A接口。 –

回答

1

目的是B類型的僅在運行時,在編譯時,編譯器不認爲其實際類型是B由於可變object被聲明A類型的,顯式的低垂需要

A object = new B(); 
B b = (B)object; 
int x = b.b; 
0

如果你叫myfunc()

A object = myfunc(); 

我定義myfunc()爲:

A myfunc() { 
    if (new Random().nextBoolean()) { 
     return new A(); 
    } else { 
     return new B(); 
    } 
} 

您是否仍然期望能始終訪問object.b?只承諾它會返回類A的東西(或從A類派生)