-3
当我们均衡两个对象时会发生什么?例如;均衡两个不同的对象
Person p = new Person();
Student s = new Student();
p=s;
(Person类是学生类的父。)
当我写p=s
,为什么我不能做到从对学生的特殊的方法? (像downcasting)我的意思是这个陈述的工作机制是什么?
当我们均衡两个对象时会发生什么?例如;均衡两个不同的对象
Person p = new Person();
Student s = new Student();
p=s;
(Person类是学生类的父。)
当我写p=s
,为什么我不能做到从对学生的特殊的方法? (像downcasting)我的意思是这个陈述的工作机制是什么?
我假设Person
类是Student
类的父类。否则你的代码将无法编译。
当你调用p=s
你存储Student
类实例的引用到p
是应该持有一个参考Person
对象。
稍后,当您尝试使用p
调用Student类方法时,编译器会产生一个错误,因为编译器知道p只包含Person
对象。要调用Student
方法,你应该使用类型转换:
((Student)p).someStudentMethod();
你不是“均衡”两个不同的对象。您将放弃创建的新Person对象,并将p变量的引用重新分配给Student对象的引用。编译器只知道p是一个Person变量,所以只有Person方法可以直接使用。 Student方法在那里,只有当你把p赋给Student时:'((Student)p).studentMethod();'才可用。如果你投错了,这有危险。 –
只有s的引用指向p〜 – lpgad