通过分配给子对象的Java对象声明

时间:2016-04-07 20:35:51

标签: java inheritance

我是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?

2 个答案:

答案 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类派生)