我准备了一个简单的测试应用程序。
public class TEST {
static abstract class Flight {
String type = "Flight";
abstract String getDirection();
public String getType() {
return this.type;
}
public void schedule() {
System.out.printf("Scheduled a %s towards %s",this.getType(),this.getDirection());
System.out.println();
System.out.printf("ReadyToGo: %s",this.isReadyToGo());
}
public boolean isReadyToGo() {
return false;
}
}
static class SouthWestFlight extends Flight {
String type = "SouthWestFlight";
@Override
String getDirection() {
return "SouthWest";
}
@Override
public boolean isReadyToGo() {
return true;
}
}
public static void main(String... args) {
new SouthWestFlight().schedule();
}
}
输出:
安排飞往西南的航班
ReadyToGo:真
结论
这里的SouthWestFlight
对象仍然是一个Flight
对象。
但是当你扩展一个类时,子类会覆盖父类的所有方法。
这就是isReadyToGo()
SouthWestFlight() 返回 true 的原因。
没有任何属性被覆盖。
这就是为什么this.getType()
返回Flight
。
但是,如果您getType()
使用这样的新方法覆盖该方法SouthWestFlight
:
@Override
public String getType() {
return this.type;
}
它将返回type
. SouthWestFlight
想知道为什么?
这是因为,第一个getType()
方法是在 parent 中定义的class Flight
。所以它返回type
. class Flight
第二种getType()
方法在中定义,因此 SouthWestFlight
它返回type
.SouthWestFlight
希望你已经清楚了。如果您发现任何错误或有任何疑问,请发表评论。