2

Abstract クラスのオブジェクトを作成するときは、インターフェイスと同じようにこのようにする必要があります。

AbstractClass abstractClass = new AbstractClass() {

          @Override
          public void abstractMethod() {
          }
        };

AbstractClassこれは、 のオブジェクトが匿名の内部クラス オブジェクトであることを意味しますか?

4

6 に答える 6

1

オブジェクトは (このコンテキストでは) クラス オブジェクトではありません。クラスから派生します。Java では、この違いが存在しないプロトタイプ ベースの言語 (JavaScript など) と比較して、クラスとオブジェクトの間に違いがあります。

あなたの例では、匿名クラスを作成し、その匿名クラスのオブジェクトを作成して変数に割り当てます。すべてワンステップで。

匿名クラスは常に内部クラスです: http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9.5 http://docs.oracle.com/javase/ specs/jls/se7/html/jls-8.html#jls-8.1.3

于 2013-07-22T12:29:43.637 に答える
0

アトラクト クラスの基本的なプロパティの 1 つは、この型の直接のインスタンスが存在しないという事実です。クラスの完全なインターフェースを実装するクラスだけをインスタンス化できます。オブジェクトを作成するには、抽象クラスを拡張して、まず非抽象クラスが必要です。

于 2013-07-22T12:30:27.030 に答える
0

抽象クラスのオブジェクトは作成できません。それらはインスタンス化できません。これを行うときに行っていることは、一種の動的サブクラス オブジェクトを作成し、それを(同時に) インスタンス化することです。多かれ少なかれ、はい、インターフェイスと同じ方法で作成できます。詳細については、この回答を参照してください。

于 2013-07-22T12:40:30.193 に答える
0

抽象クラスにはインスタンス (その型のオブジェクト) がありません。わかりやすくするために、次のリンクを参照することをお勧めします: http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

于 2013-07-22T12:31:34.313 に答える
0

実際、ここでは両方を作成します:拡張する匿名内部クラスと、この匿名クラスのインスタンスであるobject . のインスタンスを作成することはできません。 AbstractClassAbstractClass

abstractClassまた、 Type を持つという名前の変数を宣言しますAbstractClass。この変数内に、新しく定義した のサブクラスの新しく作成されたインスタンスを格納します。AbstractClass

編集:もちろん、匿名の内部クラスを再利用することはできません。これは、匿名であるためです。そのインスタンスを作成できる、または作成できる唯一の場所は、ここにあります。

これはループまたは関数である可能性があり、その場合、この匿名内部クラスのインスタンスを多数作成できます。しかし、インスタンスが作成されるのはこのコード片だけです。

于 2013-07-22T12:31:54.207 に答える