3
abstract class MyClass{

    static class StaticClass{
        public void showAdd(){
            System.out.println(" show add");
        }
    }
}

public class SampleClass extends MyClass{

    public static void main(String[] args){
         MyClass myClass = new SampleClass();
         MyClass.StaticClass staticClass = new MyClass.StaticClass();
         staticClass.showAdd();
    }
}

出力は期待どおり適切ですが、抽象クラスでどのようにnewを記述できますか??

4

5 に答える 5

5

new抽象クラスではなく、この抽象クラスに存在する内部クラスで行っています。この場合、抽象クラスは名前空間として機能しています。

于 2012-07-10T17:38:27.777 に答える
1

抽象クラスをインスタンス化することはできません。抽象クラスを実際にインスタンス化していないため、この例は「機能」します。

MyClass myClass = new SampleClass();

SampleClassは、MyClassクラスの子であり実装であり、そのため抽象的ではありません。そのため、その行は単純に正常に機能します。に置き換えnew SampleClass()てみるnew MyClass()と、コンパイラエラーが発生します。

MyClass.StaticClass staticClass = new MyClass.StaticClass();

この場合、これは次のようになります。

StaticClass staticClass = new StaticClass();

抽象クラス内で宣言された内部クラスの単なるインスタンス化です。この内部クラスは抽象的ではないため、インスタンス化される可能性があります。

于 2012-07-10T17:55:50.423 に答える
0

これを試して...

1.外部クラスは、その内部クラス(静的または非静的)を非常に所有しています。

2.したがって、内部クラス(静的または非静的)にアクセスするには、外部クラスが必要です。

例えば:

Outer.Inner i = new Outer.Inner(); 

上記の例では、外部クラスを開始していません。さらに、あなたの場合はその抽象クラスであるため、初期化されることに疑問の余地はありませんがトップレベルクラスとも呼ばれる内部静的クラスが初期化されます。

于 2012-07-10T18:19:04.397 に答える
0

抽象クラスのインスタンスを作成することはできません (リフレクションを使用しない限り)。したがって、new MyClass()そうすると、コンパイル時エラーになります。それ以外の場合は、正常に動作します。これは、あなたの例の場合です。

を使用して静的クラスのインスタンスを作成していません new MyClass.StaticClass();

抽象クラスは、完全に実装されていないクラスです (サブクラスにはいくつかの事実が残されています)。このドキュメント内部クラスの仕組みを読んでください。

静的内部クラスは、クラスの静的変数のようなものです。

于 2012-07-10T17:36:16.300 に答える
-1

抽象クラスはインスタンス化できません! それが Java のルールです。

于 2012-07-10T17:37:17.587 に答える