我是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?
答案 0 :(得分:1)
对象的类型为B
仅在运行时,在编译时,编译器并不认为它的实际类型是B,因为变量object
被声明为类型A
,需要明确的向下转发
A object = new B();
B b = (B)object;
int x = b.b;
答案 1 :(得分:0)
如果您致电myfunc()
:
A object = myfunc();
我将myfunc()
定义为:
A myfunc() {
if (new Random().nextBoolean()) {
return new A();
} else {
return new B();
}
}
您仍然希望始终可以访问object.b
吗?不,myfunc()
只承诺会返回A类(或从A类派生)