类声明-不清楚的对象类型

时间:2019-01-23 04:42:23

标签: java

如果声明为

Human tom = new Athlete();

AthleteHuman的子类,其对象类型是tom

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

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

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

该对象始终基于您创建它的类(并且您通过使用关键字new创建一个对象)。在这种情况下,您将拥有一个Athlete类的对象,该对象也将从method1()中调用Athlete,即使Human拥有自己的方法版本。

如果method1上没有Athlete,那么您将从其超类中获取继承的方法。

答案 2 :(得分:0)

引用是父类型,而对象是子类型。

在这种情况下,引用只能看到子类的覆盖方法,父类中的其他方法和实例变量,而子类中的其他方法将不可见。

您可以在这里澄清 https://www.tutorialspoint.com/java/java_overriding.htm

答案 3 :(得分:0)

在此tom中是一种运动员对象。 Athlete.method1覆盖超类中的方法。如果Athlete类中没有方法,它将调用超方法