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

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

DDD
DDDオリジナル
2024-12-24 15:57:18294ブラウズ

Can Abstract Classes Be Instantiated 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();
    }
}

my に抽象修飾子があるにもかかわらず、次を使用してそのインスタンスを作成できます。匿名のサブクラス。基本的には、オンザフライでサブクラスを作成し、その参照を抽象クラス参照 m に割り当てます。

Java 言語仕様 (JLS) によると、

"If クラス インスタンス作成式クラス本体で終わる場合、
インスタンス化されるクラスは匿名クラスです。

したがって、この場合、クラスはインスタンス化されたのは私のものではなく、匿名のサブクラスです。

この動作は、コードをコンパイルし、生成されたクラス ファイルをチェックすることで確認できます。 Poly$1.class という名前の新しいクラス ファイルが表示されます。これは、実行時に作成される匿名サブクラスに対応します。

したがって、抽象クラスを直接インスタンス化することはできませんが、匿名サブクラス

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。