有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java类声明对象类型不明确

如果有声明

Human tom = new Athlete();

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

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

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


共 (4) 个答案

  1. # 1 楼答案

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

    如果Human上的方法在Athlete中被重写,例如method1(),那么Athlete上的实现就是被调用的实现

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

  2. # 2 楼答案

    在这种情况下,汤姆是一种运动员对象。运动员method1重写了超类中的方法。如果在运动员课程中没有方法,那么它将调用super方法

  3. # 3 楼答案

    引用是父类型,但对象是子类型

    在这种情况下,只有子类的重写方法、父类中的其他方法和实例变量对引用可见,而子类中的其他方法将不可见

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

  4. # 4 楼答案

    对象总是基于您创建它的类(并且您使用关键字new创建对象)。在本例中,您将有一个Athlete类的对象,它也将从Athlete调用method1(),即使Human有自己的方法版本

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