3

次のコードで破られているオブジェクト指向の原則はどれですか? Java OO 原則ではなく、一般的な OO 原則。

class GeneralArg{}
class Arg extends GeneralArg{}

class A{
    public void test(Arg a){}
}

class B extends A{
    @Override
    public void test(GeneralArg a){}
}

これはうまくいくはずだと思います!

B.test()ただし、オーバーライドしないというコンパイルエラーがありますA.test()

4

4 に答える 4

2

ステートメント 1: すべての GeneralArg は Arg ではありません。

テストの基本定義は、次のように述べtest()Argいます。

B の定義によると、同じものを入力として使用するtest()必要がありGeneralArgます。しかし、ステートメント 1 を考えると、これは真実ではありません。

@Override は、基本クラスの定義をオーバーライドしていることを示しています。

要約すると、A.test()B.test()は同じ Methods( ) ではないため、別のメソッドdifferent signaturesをオーバーライドすることはできません。

于 2013-08-20T14:05:55.793 に答える
1

いいえ、そうすべきではありません!

メソッドに注釈を付けることで、Override何かをオーバーライドすると言いますが、そうではありません。

Java では、メソッドはコンパイル時に解決され、バインドされます。これは、宣言された引数の型がチェックされ、1 つのメソッドが選択されることを意味します。この時点では、引数の型の継承は重要ではありません。

于 2013-08-20T14:06:27.397 に答える