抽象クラスを本当にインスタンス化できますか?
面接中に、「抽象クラスをインスタンス化できますか?」というよくある質問が生じます。従来の答えは「いいえ」ですが、この答えは現在では時代遅れになっている可能性があります。
匿名クラスの謎
この謎を解明するために、 Java 言語仕様 (JLS) セクション 15.9.1 および 12.5 によって導入された改訂された理解。具体的には、クラス インスタンス作成式がクラス本体で終わる場合、匿名サブクラス が宣言されます。したがって、インスタンス化されるクラスは、抽象クラス自体ではなく、匿名サブクラスになります。
実践的なデモンストレーション
この概念を説明するために、次のコードを考えてみましょう。
abstract class My { public void myMethod() { System.out.print("Abstract"); } } class Poly { public static void main(String[] a) { My m = new My() {}; m.myMethod(); } }
このコードをコンパイルすると、生成された匿名サブクラスに対応する My$1.class ファイルが作成されることがわかります。 new My() {} を介して実行される匿名クラスのインスタンス化の場合。
結論
したがって、「抽象クラスをインスタンス化できますか?」という質問に対する答えが得られます。進化してきました。抽象クラスを直接インスタンス化することはできませんが、その匿名サブクラスのインスタンスを作成できます。これにより、抽象クラスのインスタンスとして動作し、抽象クラス内のメソッドを呼び出したり、プロパティにアクセスしたりできるようになります。
以上が抽象クラスをインスタンス化できますか? 修正された回答の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。