如果有声明

Human tom = new Athlete();

并且AthleteHuman的子类,哪个对象类型是tom

对于tom.method1(),两个类中都有一个method1(),即。 Athlete.method1()覆盖Human.method1()

我们使用哪个method1()?是来自Athlete类还是Human类的一个?

最佳答案

tom的实际类型是Athlete。但是,由于tom的声明指定了Human,因此您只能访问在Human(及其超类)上定义的方法。

如果Human中的方法在Athlete中被覆盖,例如。 method1(),则称为Athlete的实现。

如果要声明tom的类型为Athlete(根据注释中的问题),则tom的实际类型不会更改。但是,您现在可以访问仅在Athlete上定义的方法。

10-06 09:46