2章8

申し訳ありませんが、誤解を招く説明をしてしまいました。

質問のコードを再度確認すると、var キーワードを使用していますが、これはJava 10以降であれば型推論を使って適切な型が推論される機能です。この機能により、最初に B クラスのインスタンスを作成し、その後で C クラスのインスタンスを作成して a に代入しています。

ただし、var を使用すると、最初に割り当てられた型に基づいて変数の型が推論されます。ですので、var a = new B(); とした場合、aB 型と推論されます。その後に a = new C(); とすると、C のインスタンスを B 型の変数に代入しようとしているため、これは型の不一致であり、コンパイルエラーが発生します。

このため、解答としては「コンパイルエラーが発生する」が正しいです。BC は共に A を継承していますが、互いには関連がないため、B 型の変数に C 型のインスタンスを代入することはできません。

コードにコメントを追加して説明します。

// test() メソッドを持つ基底クラス
public class A { public void test() { System.out.println("A"); }
} // Aを継承し、test() メソッドをオーバーライドしているBクラス
public class B extends A { @Override public void test() { System.out.println("B"); }
} // Aを継承し、test() メソッドをオーバーライドしているCクラス
public class C extends A { @Override public void test() { System.out.println("C"); }
} // プログラムを実行するためのmainメソッドを含むMainクラス
public class Main { public static void main(String[] args) { // 最初にBクラスのインスタンスを作成し、aはB型と推論される var a = new B(); // B型の変数aにCクラスのインスタンスを代入しようとするとコンパイルエラーが発生 a = new C(); // ここでコンパイルエラー // エラーがなければ、aが参照するオブジェクトのtest()メソッドを呼び出す a.test(); }
}
Enter fullscreen mode
Exit fullscreen mode

この説明が明確に理解に繋がることを願っています。


Discover more from Coursity

Subscribe to get the latest posts sent to your email.

Leave a Comment

Your email address will not be published. Required fields are marked *

Discover more from Coursity

Subscribe now to keep reading and get access to the full archive.

Continue reading

Scroll to Top
If you’re just getting started with javascript, there are some essential steps you should take. © invogue web design agency. How do i redesign an existing wordpress site ?.