私はこの質問は非常に確認してくださいどのように単語にないんだけど、うまくいけばの例では、それは少しより明確になります。私は(何もしない)と呼ばれることはない実装抽象メソッドのいずれかを持っているための最善の方法を把握しようとしていると、私の現在のアプローチはやや右のすべてである場合、私は興味があります。
abstract class Vehicle {
void doSomething() {
if (this.getClass() instanceof Chevy) {
operateOnCar();
}
}
abstract void operateOnCar();
}
class Chevy extends Vehicle {
@Override
void operateOnCar() {
print("Doing something to a car")
}
}
class HarleyDavidson extends Vehicle {
@Override
void operateOnCar() {
throw Exception("This isn't a car")
}
}
私は考えることができる他のアプローチが持っているHarleyDavidson
クラスが実装しoperateOnCar()
ますが、絶対に何もしない-すなわち、空のメソッド本体。それは潜在的に良いですか?たぶん、どちらもこれらの実行可能な例ではないと私は自分のデザインを再考する必要があります。ありがとう!
編集:もう少し明確に私の例を作ってみました
私は(何もしない)と呼ばれることはない実装抽象メソッドのいずれかを持って最善の方法を把握しようとしています
メソッドが呼び出されるべきではないと主張することは、何もしないべきであると主張するとは全く異なるものです。さらに、任意のサブクラスのインスタンスを呼び出すしても大丈夫ではないことに関係なく、抽象の、スーパークラスのメソッドを定義するためにwrongheadedされます。このように、「何もしない」の代替にいくつかのバリエーションは非常に良い選択です。
それも戻り値を提供する必要がないときと何もしない方法について一生懸命何ですか?これは何もしない方法です。
void isCar() {
// empty
}
私はまた、名前のメソッドは、この時点で守るべきisCar
返すために、ほとんどのJavaプログラマが予想されるboolean
状況でどのようなことを意味し、それが呼び出されるオブジェクトは「車」であるかどうかを示すを。これは、このような方法は、それがへの書き込みを行うことを何も返さないように宣言し、そしておそらくさらに大きな驚きされていることに驚きとして来るでしょうSystem.out
。