1
class A {
.
.
.
}

class B extends A {
.
.
.
}

A var = new B()動作します。しかし、単純なものではなく、いつこれを行う必要がありB var = B()ますか? どんな違いがあるの?var.method() または var.field の使用中に何か違いはありますか?

4

5 に答える 5

0

適切な最もスーパークラスまたは理想的にはインターフェイスを使用します。これは、必要な最小限の機能をコードで示し、コードを変更する必要があるかどうかを示しています

 A var = new B();

 A var = new C(); // C also extends A

これは些細なことです。ただし、Bどこでも使用すると、後でコードを変更してチェックするために mroe を機能させることになります。

唯一の例外は、オブジェクトを一般化しすぎて、重要な動作を見逃す可能性がある場合です。例えば

 void methodIsInSet(Set<T> set);

で置き換えることができます

 void methodIsInSet(Collection<T> set);

メソッドは同じですが、重複などに関する重要な仮定を除外しています。

于 2013-10-28T07:44:46.190 に答える
0

通常、 などの単純なステートメントではそれを行わないA var = new B()ため、多くの場合、あなたの観察は正しいです。ただし、次のように使用します

public A CreateAnObject(int i)
{
    if (i = 0)
        return new A();
    else 
        return new B();
}

これで、A var = CreateAnObject(something). var は A または B のいずれかになります。

于 2013-10-28T07:44:48.723 に答える
0

ケース 1. JDBC がその例です。オブジェクトを参照するために Connection、Statemet インターフェースを使用しますが、プロバイダーはあなたのクラスのために ConnectionImpl と StatementImpl を実装します (ここでは、名前については気にしません)。

ケース 2: インターフェイスは一般的な表現であり、実装は特定の表現です。インターフェイスを使用する場合、同じ参照が他の実装クラス オブジェクトに役立つ場合があります。

于 2013-10-28T07:46:08.427 に答える