1

私はインターフェースを持っています

public interface I{
  Status getStatus();
}

次に、そのインターフェイスを実装する抽象クラスがあります

public abstract class C implements I{
       public Status getStatus() {
        return status;
    }
}

別のクラスから getstatus() メソッドにアクセスしたいのですが、試してみました

C status = new C();

しかし、 「タイプCをインスタンス化できません」というエラーが表示されます

どんな助けでも大歓迎です..!! ありがとう。

4

5 に答える 5

4

抽象クラスのオブジェクトを作成することはできません抽象クラスを拡張する具象クラスを作成し、そのクラス オブジェクトを使用してメソッドを呼び出します

 class test extends c{
      ..........
     }

    c  obj1= new test();
   obj1.getStatus();
于 2013-09-06T05:54:56.030 に答える
4

ドキュメントによると

A class type should be declared abstract only if the intent is that subclasses
can be created to complete the implementation. If the intent is simply to prevent
instantiation of a class, the proper way to express this is to declare a 
constructor of no arguments, make it private, never invoke it, and declare no
other constructors.

抽象クラスには抽象メソッドを含めることはできませんが、有効なユース ケース (サブクラスからスーパーを呼び出すなど) が必要です。インスタンス化(抽象クラ​​スのオブジェクトの作成)はできません。

したがって、abstract キーワードを削除するか、抽象クラスを拡張する別のクラスを作成してください。

抽象クラスがインターフェースを実装するときの記録のためだけに、抽象クラスにインターフェースメソッドを実装する必要はありません(ただし、設計で指示されている場合は可能です)。ただし、それを実装する抽象クラスにインターフェイス メソッドを実装しない場合は、抽象クラスの最初の具象サブクラスに同じものを実装する必要があります。また、抽象クラスにインターフェイス メソッドを実装する場合は、抽象クラスの具体的なサブクラスに再度実装する必要はありません。ただし、いつでもオーバーライドできます。

于 2013-09-06T05:56:14.000 に答える
2

クラスがabstract.

をインスタンス化することはできませんabstract class

あなたができることは、どの子にもそのクラスを拡張させ、そのためのオブジェクトを作成させることです。

抽象メソッドとクラス

于 2013-09-06T05:50:55.707 に答える
2

抽象クラスをインスタンス化できません

于 2013-09-06T05:51:29.920 に答える