手始めに、私は質問を十分に表現したことを望みます。そうでない場合は、自由に編集するか、変更を提案してください。
私は大学のコースを支援するためにJavaの教科書を調べていますabstract class
が、B747、B757、B767の3つのサブクラスで飛行機を作成するように求める演習に出くわしました。これらの3つのサブクラスの各オブジェクトには、一意のシリアル番号があります。
質問の他の多くの部分を切り取って(私は関係がないことを願っています!)、私はこれを行いました:
public abstract class Airplane {
String serialNumber;
public String toString() {
return getClass().getName() + ": " + serialNumber
}
}
次に、3つのサブクラスを宣言しました。各サブクラスは、次のようになります。
public class B747 extends Airplane {
B747(String serial) {
serialNumber = serial;
}
}
最後に、メインプログラムで、次のコードを使用して新しいオブジェクトをインスタンス化しました。
Airplane a = new B747("ABC101");
System.out.println ("Airplane a: " + a);
これで、コードは正常に機能します。しかし、私が本の答えを見たとき、彼らはそれを別の方法で行うことを選びました。彼らは同じ方法で各オブジェクトをインスタンス化しましたが、代わりに各クラスに次のメソッドがありました。
public B747 (String serial) {
super (serial);
}
抽象スーパークラスの飛行機では、彼らはそれから持っていました:
public Airplane (String serial) {
this.serial = serial;
}
これは、文字列をスーパークラスに昇格させてそこで行動するという個人的な好みの問題でしたか、それともセキュリティかどうかにかかわらず、これは何らかの利点を提供しますか?