赞
踩
里氏代换原则是面向对象设计的基本原则之一,由美国计算机科学家芭芭拉·利斯科夫(Barbara Liskov)提出。这个原则定义了子类型之间的关系,确保在软件中,我们可以将父类对象替换为子类对象,而不会影响程序的正确性。它在原文中的定义是这样的:如果对每一个类型为 T1 的对象 o1,都有类型为 T2 的对象 o2,使得以 T1 定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。
简单来说,就是子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说:子类继承父类时,除添加新的方法完成新增功能 P2 外,还要保证通过重写父类的方法完成原有功能 P1 时,子类的方法行为要和父类的一致。
而在Java中,我们通常通过继承来创建子类。根据里氏代换原则,我们需要确保子类的行为和父类的行为一致。这意味着:
假设我们有一个父类Bird
和一个子类Penguin
:
class Bird {
void fly() {
System.out.println("I can fly");
}
}
class Penguin extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("Penguins can't fly");
}
}
在这个例子中,Penguin
是Bird
的子类,但是它覆盖了fly
方法并抛出了异常,因为企鹅不能飞。这违反了里氏代换原则,因为我们不能将Bird
对象替换为Penguin
对象而不改变程序的行为。
通常来讲,里氏代换原则和依赖倒置原则二者相辅相成,依赖倒置原则也叫依赖倒转原则,在我们后续的文章中有详细介绍。
总的来说,遵循里氏代换原则可以帮助我们设计出更健壮、可维护和可扩展的系统。而违反这个原则可能会导致代码的复杂性增加,维护和扩展变得困难。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。