在不调用父方法的情况下覆盖,违反Liskov原则

时间:2018-01-01 00:11:33

标签: java oop solid-principles method-overriding

我正在开发一个简单的项目。在我的项目中,我与利斯科夫原则的含义发生冲突。

我用这个例子简化了我的项目问题:

public class Animal {  

     public void feed() {     

         // do something here         
     }    
}    


public class Dog extends Animal {

    // some methods and attributes

    @Override
    public void feed() {   

        // never call parent feed() method (super.feed())
    }
}

所以,我的问题是,如果我没有调用父方法并在覆盖方法中编写一个全新的代码,这是否违反了Liskov原则?

感谢。

2 个答案:

答案 0 :(得分:4)

不,只要子类'它不会违反Liskov原则。实现满足了基类的期望。

答案 1 :(得分:1)

LSP原则是关于合同,当你有动物实例或从某人那里得到它并尝试喂它时你认为狗做它应该做的事情而不是例子飞走或试图杀死你。实现动物合同的正确狗实施应适合所有期望动物的地方。当狗做一些奇怪的事情(不合同的事情)时,它违反了LSP。在履行合同时,你如何实现狗的方法与LSP的背景无关。

  

可替代性是面向对象编程中的一个原则,指出在计算机程序中,如果S是T的子类型,则类型T的对象可以用类型S的对象替换(即,类型T的对象可以是在不改变T的任何期望属性(正确性,执行的任务等)的情况下,用子类型S)的任何对象代替。

https://en.wikipedia.org/wiki/Liskov_substitution_principle