-1

申し訳ありませんが、抽象クラスの質問には誰もがうんざりしていると思います。

ルール/事実:抽象クラスはインスタンス化できません。

私は私を混乱させている例に出くわしました:

public abstract class AbstractClass {
    private String name;

    public AbstractClass(String name)
    {
        this.name = name;
    }

    public String getName(){
        return this.name;
    }
}

public class Test {
    public static void main(String [] args)
    {
    //breaking rule
        AbstractClass temp = new AbstractClass("name") {
        };

        System.out.println(temp.getName());
    }
}
4

3 に答える 3

3

これがJavaの場合、この抽象クラスを拡張する匿名クラスをここで作成します。抽象メソッドがないため、メソッドを実装する必要はありません

于 2013-03-10T15:45:15.277 に答える
0

OP:抽象クラスを初期化できません。jvmによって初期化するには、具象クラスに拡張する必要があります。TestにAbstractClassを拡張させてから名前を渡すこともできますが、抽象に対してnewを試すだけでは機能しません。

編集:初期化子の中括弧に気づきませんでした。上記の答えは正しいです new Abstract(){};が、アノンインナーを作成します。

于 2013-03-10T15:47:06.023 に答える
0

ここで重要なのは、後の角かっこnew AbstractClass("name")です。

あなたがしているのは、匿名の内部クラスのインスタンス化です。匿名クラスをインスタンス化するのと同じではありません。ここではルールを破ることはありません。匿名の内部クラスの作成は、非抽象クラスでも実行できます。

これが意味するのは、コードのその部分が実行されるたびに、クラスの新しいオブジェクトを作成するだけでなく、実際に新しいクラスを作成するということです。

于 2013-03-10T15:51:11.697 に答える