2

インタビューで、抽象クラスとインターフェースの両方を使用してはいけないシナリオはどれですか?と尋ねられました。

当時、あなたがこれをしたくない具体的な例を挙げて、彼の質問に明確に答えることができませんでした. 例を挙げて特定の回答をたくさん検索しましたが、見つかりません。

いつどれを使うべきか知っています。また、抽象化とは、一度にいくつかの概念に集中できるように、詳細を削減および除外するためのメカニズムおよび実践であることも理解し

ですから、関係が見つからない場合は使用しないでくださいと答えることができますか。

天才的な皆さん、少し時間を割いて私に答えて、私の知識を増やしてくれませんか?

前もって感謝します。

4

5 に答える 5

3

頭に浮かぶアンチパターンの 1 つは、定数 (public static final 変数として) が抽象クラスとインターフェイスのいずれかに配置され、これらの定数のユーザーがインターフェイスを実装するか、抽象クラスを拡張する場合です。これのいわゆる利点は、定数を使用するたびに修飾する必要がないことです。例:MyConstants.MY_VALUEvsMY_VALUE

Java 1.5 以降では、静的インポートを使用して、定数をクラス名で修飾する必要がなくなりました。個人的には、特に定数のクラス名に意味のある「グループ化」名が付いている場合は、定数をクラス名で修飾することはあまり気にしません。

于 2013-05-24T06:39:56.670 に答える
2

おそらく、同じものの 2 つのバージョンを維持しないように、明示的に 1 つの実装だけが必要な場合です。finalこの状況でクラスを作成することもできます。

于 2013-05-24T05:00:16.577 に答える
1

私には1つの考えがあります。おそらく、クラスに一連の静的ユーティリティが含まれている場合。たとえばStringUtils。とにかく、あなたが書いたような質問はあまり意味がないと思います。

于 2013-05-24T04:30:36.793 に答える
0

私が思う2ケース

1 : クラスのオブジェクトをインスタンス化する必要がある場合 ( eg: MyClass object=new MyClass())

2 : 親クラスと同じ実装を継承する場合:

class Parent {
    int x;

    public void setX(int x) {
        this.x = 2 * x;
    }
}

class Child extends Parent {
    int y = 1;

    public void setX_AND_Y(int x, int y) {
        setX(x); // same implmentaion
        this.y = y;
    }
}
于 2013-05-24T05:19:29.440 に答える