2017-04-02 48 views
-3

当我们均衡两个对象时会发生什么?例如;均衡两个不同的对象

Person p = new Person(); 
Student s = new Student(); 
p=s; 

(Person类是学生类的父。)

当我写p=s,为什么我不能做到从对学生的特殊的方法? (像downcasting)我的意思是这个陈述的工作机制是什么?

+4

你不是“均衡”两个不同的对象。您将放弃创建的新Person对象,并将p变量的引用重新分配给Student对象的引用。编译器只知道p是一个Person变量,所以只有Person方法可以直接使用。 Student方法在那里,只有当你把p赋给Student时:'((Student)p).studentMethod();'才可用。如果你投错了,这有危险。 –

+0

只有s的引用指向p〜 – lpgad

回答

1

我假设Person类是Student类的父类。否则你的代码将无法编译。

当你调用p=s你存储Student类实例的引用到p是应该持有一个参考Person对象。

稍后,当您尝试使用p调用Student类方法时,编译器会产生一个错误,因为编译器知道p只包含Person对象。要调用Student方法,你应该使用类型转换:

((Student)p).someStudentMethod();