抽象クラスはインスタンス化できますか: より深く掘り下げる
従来の理解では、抽象クラスはインスタンス化できません。しかし、最近のインタビューパズルは別の視点をもたらしました。この興味深い質問を実際の例で詳しく見てみましょう:
abstract class My { public void mymethod() { System.out.print("Abstract"); } } class Poly { public static void main(String a[]) { My m = new My() {}; m.mymethod(); } }
従来の概念に反して、このシナリオでは抽象クラスをインスタンス化することができます。ただし、微妙な違いがあります。抽象クラス自体をインスタンス化する代わりに、その匿名サブクラスを作成しています。
匿名サブクラスについて
匿名サブクラスは、指定されたスーパークラスまたはインターフェイスを拡張または実装する名前のない内部クラスです。上記のコードでは:
コンパイルによる検証
この動作を確認するには、コードをコンパイルすることを検討してください。コンパイルされた出力では、
Poly$1.class の存在は、匿名サブクラスのインスタンス化を確認します。抽象クラス自体ではありません。
Java 言語仕様サポート
Java 言語仕様 (JLS) のセクション 15.9.1: 「インスタンス化されるクラスは匿名サブクラスです。」
結論
抽象クラスは直接インスタンス化できませんが、匿名サブクラスによって拡張できます。カスタマイズされたメソッドとフィールドを使用したインスタンスの作成用。このニュアンスは、Java のオブジェクト指向の概念を理解して利用するための貴重なツールです。
以上がJava で抽象クラスをインスタンス化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。