0

持つことは可能ですか:

public abstract void someMethod();
...
public void someMethod() {
    // ...
}

同じクラスの中で?または、定義は子クラスにある必要がありますか?

4

4 に答える 4

6
public abstract void someMethod();

public void someMethod() {
   // ...
}

同じクラスで、それはメソッド定義の重複です。ありえない。メソッドは、メソッドのシグネチャに基づいて区別され、のような修飾子に基づいていませんabstract。公式のJava チュートリアルから:

メソッド宣言の 2 つのコンポーネントは、メソッド シグネチャ (メソッドの名前とパラメータの型) で構成されます。Java プログラミング言語はメソッドのオーバーロードをサポートし、Java は異なるメソッド シグネチャを持つメソッドを区別できます。

質問:

Or does the definition have to be in the child classes?

サブクラスにすることもできますが、階層内の具体的なサブクラスである必要があります。そのため、最初の非抽象サブクラスが抽象メソッドの実装を提供する必要があります。繰り返しますが、Javaチュートリアルから:

抽象クラスがサブクラス化されると、通常、サブクラスはその親クラスのすべての抽象メソッドの実装を提供します。ただし、そうでない場合は、サブクラスも抽象宣言する必要があります。

于 2013-05-14T17:42:04.967 に答える
1

クラスに定義を含めることはできますが、そのクラスをインスタンス化することはできず、子クラスのみをインスタンス化できます。

于 2013-05-14T17:38:44.667 に答える