如果有声明Human tom = new Athlete();
并且Athlete
是Human
的子类,哪个对象类型是tom
?
对于tom.method1()
,两个类中都有一个method1()
,即。 Athlete.method1()
覆盖Human.method1()
,
我们使用哪个method1()
?是来自Athlete
类还是Human
类的一个?
最佳答案
tom
的实际类型是Athlete
。但是,由于tom
的声明指定了Human
,因此您只能访问在Human
(及其超类)上定义的方法。
如果Human
中的方法在Athlete
中被覆盖,例如。 method1()
,则称为Athlete
的实现。
如果要声明tom
的类型为Athlete
(根据注释中的问题),则tom
的实际类型不会更改。但是,您现在可以访问仅在Athlete
上定义的方法。