2016-04-07 384 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类派生)