これはばかげた質問のように思えるかもしれませんが、抽象的なメソッドを作成する際の「ベストプラクティス」を知りたいと思います。それらの可視性は公開または保護する必要がありますか?
抽象メソッドを実装する子クラスは公開されますが、抽象メソッドを保護しておくことをお勧めしますか?
これはばかげた質問のように思えるかもしれませんが、抽象的なメソッドを作成する際の「ベストプラクティス」を知りたいと思います。それらの可視性は公開または保護する必要がありますか?
抽象メソッドを実装する子クラスは公開されますが、抽象メソッドを保護しておくことをお勧めしますか?
ユースケースによって異なります。抽象メソッドが、抽象クラスのパブリックメソッドから利用できるより優れた機能の一部のみを実装している場合は、おそらく保護する必要があります。別のクラスから呼び出すことができる/すべきであるスタンドアロンメソッドである場合は、パブリックにします。
例:
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();
}
パブリック、プロテクト、プライベートの違いは次のとおりです。
メソッドの場合、publicを設定すると、プロジェクト内のすべてのパッケージ内のすべてのクラスにアクセスできます。protectedを設定すると、抽象クラスを拡張する同じパッケージまたはサブクラス内のすべてのクラスにアクセスできます。
質問番号について。2:はい、そうです。
私はそれが方法が何をするかに依存すると思います。それがクラス(およびサブクラス)の動作を表すものである場合、それはパブリックである必要があります。サブクラスによって実装されるメソッドが内部であり、基本クラスの他のメソッドによって使用される場合(アルゴリズム戦略の定義など)、保護する必要があります。