我一共有三个班。Main、Animal(超类)和 Cat(子类)。当我尝试调用 whatIsTheClass() 方法时,我不明白输出“Cat”。我期待看到输出“动物”。我期望输出“Animal”的原因是因为我相信 whatIsTheClass() 方法是从 Animal 对象而不是 Cat 对象调用的,因为子类不包含此方法。
主要类:
package com.example.java;
public class Main {
public static void main(String[] args) {
Animal cat = new Cat();
}
}
猫类:
package com.example.java;
public class Cat extends Animal {
public Cat() {
super();
whatIsTheClass();
}
}
动物类:
package com.example.java;
public class Animal {
public void whatIsTheClass() {
System.out.println(this.getClass().getSimpleName());
}
}
我的理解是,在继承中,子类不会从超类复制方法。如果被调用的方法没有在 Subclass 对象中定义,它会在 Superclass 对象中寻找被调用的方法。如果在 Superclass 对象中定义了被调用的方法,它将从那里调用。在这种情况下,因为子类没有定义它自己的 whatIsTheClass() 方法,它必须使用在 Superclass 对象中定义的 whatIsTheClass() 方法。但是如果 whatIsTheClass() 是从 Superclass 对象调用的,为什么它返回的是 Subclass 的名称而不是 Superclass 的名称?
皈依舞
神不在的星期二
相关分类