おはようございます!!
今日はまず最初に、昨日(20日目 2025.02.19)分からなくて頭を抱えたところを再度やってみました。
どういうところかというと、菅原先生が出してくださった演習問題です。
昨日の演習問題は、
・継承
・オーバーライド
・this / super
の理解度チェックだったのですが、
第3問の「このコードで実行したらどういう風に表示されるでしょう??」
で僕はもうパニックになってしまいました、、、
朝から幼稚園関係のやつやらでちょっと疲れちゃってたのもあるのですが、
頭が回らなくなって今日、朝起きてからもう一回やろうと思った次第です。
(どれくらい頭が回らなくてパニックだったかというと、上の子の習い事を忘れるくらいです)
問題はこんな感じでした。
(class Car)
class Car{
Car(){
System.out.println(“Car()”);
}
Car(int no){
System.out.println(“Car(int no)”);
}
}
(class Taxi)
class Taxi(){
this(9999);
System.out.println(“Taxi()”);
}
Taxi(int no){
super(no);
System.out.println(“Taxi(int no)”);
}
Taxi(String no){
System.out.println(“Taxi(String no)”);
}
}
(実行クラス)
Car c = new Car();
System.out.println(“——“);
Taxi ti = new Taxi(2525);
System.out.println(“——“);
Taxi t0 = new Taxi();
System.out.println(“——“);
Taxi t2 = new Taxi(“2525”);
まあ、昨日解説を一通り見たというのもあると思うのですが、今日はスイスイと理解できました!!
昨日は、解説を聞いても「???」だったので、進歩だと思ってます。
まず、メソッドごとに整理することにしました!!
(class Car)
Car()
→「Car()」と表示
Car(int no)
→ 「Car(int no)」と表示
(class Taxi)
Taxi()
→ ①Taxiクラスの(9999)を取得する。(int)
→Taxiクラスの引数1つは「Taxi(int no)」だからここを参照
→class Carの「no」のメソッドを取得 → 「Car(int no)」と表示
→ ②「Taxi()」と表示
Taxi(int no)
→ ①class Carの「no」のメソッドを取得→ 「Car(int no) 」と表示
→ ②「Taxi(int no)」と表示
Taxi(String no)
→ ① class Carにあるnoを参照にしているので、本来、「super」が設定されるべき。
なので、デフォルトコンストラクタ「super()」が裏で実行される。
→「Car()メソッド」を取得
→「Car()」と表示
→ ②「Taxi(String no)」と表示
最後のデフォルトコンストラクタのやつは、昨日聞いたにも関わらず、完全に失念してました!!
けど、ノートに書いて整理したらすごく頭がスッキリです!!
というわけで、
(実行結果)
Car()
——
Car(int no)
Taxi(int no)
——
Car(int no)
Taxi(int no)
Taxi()
——
Car()
Taxi(String no)
てな感じです!!
昨日は、2525とか9999の数字にも惑わされましたが、各メソッドで値を代入する処理が定義されておらず、System~の表示だけだったので、この結果になったんやなって理解できました!!!
というわけで、今日も楽しんでいこう!!!