ホームページ > Java > &#&チュートリアル > Java で抽象クラスをインスタンス化できますか?

Java で抽象クラスをインスタンス化できますか?

Patricia Arquette
リリース: 2024-12-07 10:57:16
オリジナル
769 人が閲覧しました

Can We Instantiate an Abstract Class in Java?

抽象クラスはインスタンス化できますか: より深く掘り下げる

従来の理解では、抽象クラスはインスタンス化できません。しかし、最近のインタビューパズルは別の視点をもたらしました。この興味深い質問を実際の例で詳しく見てみましょう:

abstract class My {
    public void mymethod() {
        System.out.print("Abstract");
    }
}

class Poly {
    public static void main(String a[]) {
        My m = new My() {};
        m.mymethod();
    }
}
ログイン後にコピー

従来の概念に反して、このシナリオでは抽象クラスをインスタンス化することができます。ただし、微妙な違いがあります。抽象クラス自体をインスタンス化する代わりに、その匿名サブクラスを作成しています。

匿名サブクラスについて

匿名サブクラスは、指定されたスーパークラスまたはインターフェイスを拡張または実装する名前のない内部クラスです。上記のコードでは:

  • new My() は、My を拡張する匿名サブクラスのインスタンスを作成します。
  • クラス本体 {} を使用すると、これ専用のメソッドとフィールドを定義できます。 instance.
  • m は匿名サブクラスのインスタンスへの参照であり、オーバーライドされたインスタンスにアクセスします。 mymethod().

コンパイルによる検証

この動作を確認するには、コードをコンパイルすることを検討してください。コンパイルされた出力では、

  • My.class: 抽象クラスのバイトコードです。
  • Poly.class: 囲んでいるファイルのバイトコードclass.
  • Poly$1.class: 匿名サブクラスのバイトコード。

Poly$1.class の存在は、匿名サブクラスのインスタンス化を確認します。抽象クラス自体ではありません。

Java 言語仕様サポート

Java 言語仕様 (JLS) のセクション 15.9.1: 「インスタンス化されるクラスは匿名サブクラスです。」

結論

抽象クラスは直接インスタンス化できませんが、匿名サブクラスによって拡張できます。カスタマイズされたメソッドとフィールドを使用したインスタンスの作成用。このニュアンスは、Java のオブジェクト指向の概念を理解して利用するための貴重なツールです。

以上がJava で抽象クラスをインスタンス化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート