通过扩展具体的父母有抽象的孩子的目的

时间:2011-08-25 19:04:54

标签: java oop

有时,我遇到了一些课堂设计。

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课程的目的是什么?为什么我们将非抽象说话方法“转换”为抽象说法?

2 个答案:

答案 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类可能有新的子类不需要的其他方法实现。
了解更多有关您的确切情况将有助于确定此方案是否有更好的设计。