簡単なテストアプリを用意しました。
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
返します。 type
SouthWestFlight
あなたがそれを明確にしたことを願っています。間違いや不明な点がありましたらコメントしてください。