有人可以解释为什么会发生这种情况:
class Apple {
String type;
setType(){
System.out.println("inside apple class");
this.type = "apple";
}
}
class RedApple extends Apple {
String type;
setType() {
System.out.println("inside red-apple class");
this.type = "redapple";
}
}
int main {
RedApple red = new RedApple();
Apple apple = (Apple) red;
apple.setType();
}
但产生的输出是:
"inside red-apple class”
为什么.setType()方法执行子类方法,而不是超类方法,即使我正在上传,可以看出?
解决方法:
那是因为多态性在Java中是如何工作的:它总是使用方法的最衍生版本,它会覆盖其他版本.获取基类版本的唯一方法是在派生最多的覆盖中使用super.setType.