簡単なテストアプリを用意しました。
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();
}
}
出力:
SouthWest へのフライトをスケジュール
ReadyToGo: true
結論
ここで、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。2 番目のgetType()メソッドは で定義されているため、のフィールドをSouthWestFlight返します。 typeSouthWestFlight
あなたがそれを明確にしたことを願っています。間違いや不明な点がありましたらコメントしてください。