目的是通过扩展具体的父节点来产生抽象的子节点



有时,我遇到一些类的设计如下:

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类可能有其他的方法,新的子类将不必实现。
更多地了解您的实际情况将有助于确定是否有更好的设计。

最新更新