7

これはばかげた質問のように思えるかもしれませんが、抽象的なメソッドを作成する際の「ベストプラクティス」を知りたいと思います。それらの可視性は公開または保護する必要がありますか?

抽象メソッドを実装する子クラスは公開されますが、抽象メソッドを保護しておくことをお勧めしますか?

4

3 に答える 3

11

ユースケースによって異なります。抽象メソッドが、抽象クラスのパブリックメソッドから利用できるより優れた機能の一部のみを実装している場合は、おそらく保護する必要があります。別のクラスから呼び出すことができる/すべきであるスタンドアロンメソッドである場合は、パブリックにします。

例:

public abstract class Foo implements Closeable {
    public final void close() {
        // do whatever
        doClose();
    }

    protected abstract void doClose();
}

public abstract class Bar {
    public void read(byte[] b) {
        for(int x = 0; x < b.length; x++) {
            b[x] = read();
        }
    }

    public abstract int read();
}
于 2012-04-12T01:05:17.643 に答える
2

パブリック、プロテクト、プライベートの違いは次のとおりです。

修飾子

メソッドの場合、publicを設定すると、プロジェクト内のすべてのパッケージ内のすべてのクラスにアクセスできます。protectedを設定すると、抽象クラスを拡張する同じパッケージまたはサブクラス内のすべてのクラスにアクセスできます。

質問番号について。2:はい、そうです。

于 2012-04-12T01:19:35.157 に答える
1

私はそれが方法が何をするかに依存すると思います。それがクラス(およびサブクラス)の動作を表すものである場合、それはパブリックである必要があります。サブクラスによって実装されるメソッドが内部であり、基本クラスの他のメソッドによって使用される場合(アルゴリズム戦略の定義など)、保護する必要があります。

于 2012-04-12T01:04:45.180 に答える