有时,我遇到一些类的设计如下:
abstract class animal {
public abstract void speak();
}
class dog extends animal {
@Override
public void speak() {
// Do something.
}
}
abstract class abstract_dog extends dog {
@Override
public abstract void speak();
}
我想知道,有一个abstract_dog
类的目的是什么?为什么我们要把非抽象说话的方法"转化"为抽象说话呢?
如果您想创建一个基类,强制人们覆盖speak
,但继承Dog
。
我同意SLaks的观点,并认为这将是现实生活中的情况:
abstract class animal {
public abstract void speak();
}
class dog extends animal {
@Override
public void speak() {
// Dog says 'bark'
}
}
abstract class abstract_dog extends dog {
@Override
public abstract void speak();
}
class poodle extends abstract_dog {
@Override
public void speak() {
// poodle says 'yip yip'
}
}
class great_dane extends abstract_dog {
@Override
public void speak() {
// great dane says 'ruff ruff'
}
}
我认为你会使用这种情况下,你想让一个新的子类实现speak
方法和dog
类可能有其他的方法,新的子类将不必实现。
更多地了解您的实际情况将有助于确定是否有更好的设计。