Liskov的替代原则如何与JAVA的覆盖相关?完全引导和覆盖之间有什么不同?

时间:2016-10-26 05:45:01

标签: java virtual-functions method-overriding liskov-substitution-principle method-hiding

在编程语言中,如果你想要一个子对象应该作为父和子的替代品。仍然不应该失去自己的身份(作为孩子),你必须得到父母的许可。这就是我们在C#或C ++中虚拟化这些方法的原因。这变得完全隐藏起来。在java中,完全隐藏是否被视为重写? 99%的时间我在这里有错误的概念,因为我认为我认为它只是隐藏。一个覆盖函数可以完全隐藏,就像只关注JAVA一样吗?

1 个答案:

答案 0 :(得分:0)

Liskkiov的替换原则与返回抽象父实现而不是具体子实现的函数相关联。例如

ArrayList getList vs List getList

在第一种情况的上述示例中,getList方法返回一个具体的List实现,在第二种情况下,getList方法返回List接口的一个实例。现在根据Liskov替换原则,应该使用第二种方法,因为第二种方法可以被子类覆盖以返回List的不同具体实现,而在第一种情况下,只能返回ArrayList子类的ArrayList。因此,第一种情况不如第二种情况抽象,根据Liskov的替代原则,父实现应尽可能抽象,以允许子项按要求自由实现。

关于方法隐藏,以便只能使用静态方法。覆盖java并不会隐藏该方法,因为它在实例级别。但是对于静态方法,由于该方法属于类级别,因此多态性是不可能的,因此如果子类创建具有相同名称,参数和返回类型的静态方法并且尝试静态访问该方法,则它们会被继承。将调用类版本而不是超类版本,因为子类现在已经有效地从超类中隐藏了该方法。