有时,我遇到了一些课堂设计。
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
课程的目的是什么?为什么我们将非抽象说话方法“转换”为抽象说法?
答案 0 :(得分:4)
如果您想创建一个强制人们覆盖speak
的基类,但继承Dog
。
答案 1 :(得分:0)
我同意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'
}
}
我认为你会在你希望make一个新的子类实现speak
方法的情况下使用它,而dog
类可能有新的子类不需要的其他方法实现。
了解更多有关您的确切情况将有助于确定此方案是否有更好的设计。