当前位置: 首页 > wzjs >正文

上海模板建站平台关键词优化的原则

上海模板建站平台,关键词优化的原则,做向日葵的专业网站,舆情网站设计核心记住一句话:基类能够针对所有的子类进行替换。 换到软件系统的实现里面就是:在软件系统中,子类应该可以替换任何基类能够出现的位置,并且经过替换以后,代码还能正常工作。 里氏替换原则(LSP&#xff…

核心记住一句话:基类能够针对所有的子类进行替换

换到软件系统的实现里面就是:在软件系统中,子类应该可以替换任何基类能够出现的位置,并且经过替换以后,代码还能正常工作。

里氏替换原则(LSP)——让代码“讲武德”

生动理解

  1. 别搞“特权”
    父类能做的,子类必须全盘接手,比如:

    • ✅ 父类「鸟」会飞,子类「麻雀」也能飞

    • ❌ 子类「企鹅」继承「鸟」却不会飞(坑爹设计!)

  2. 禁止“魔改”
    子类方法参数要比父类更宽松,返回值要比父类更严格。即是不修改方法的核心功能、不加强输入约束、不削弱输出保证。

  3. 异常不乱抛
    子类不新增父类未声明的异常类型。

1、3两点好理解,重点是第二点提及的不加强输入约束,不削弱输出保证是什么意思。这里举一个不加强输入约束的例子。

// 父类:动物可以吃任何食物
class Animal {void eat(Food food) { // 接受广义的Food类型System.out.println("动物吃食物");}
}// 子类:狗只能吃狗粮(违反LSP)
class Dog extends Animal {@Overridevoid eat(DogFood food) { //看似很优雅的设计实现,整体体现多态的特性 但是违反LSP 输入约束更严格(参数类型特化)System.out.println("狗吃狗粮");}
}

为什么违反LSP?

  1. 前置条件被加强

    • 父类契约eat()方法接受任何Food类型(如Food可以是肉类、蔬菜等)。

    • 子类修改Dog要求参数必须是DogFood(如狗粮是Food的子类)。

    • 结果:原本能处理Food的调用逻辑,在替换为Dog后,如果传入非DogFoodFood类型(如Meat),程序将无法正常工作。

public class Main {public static void main(String[] args) {Animal animal = new Dog(); // 多态引用(父类指向子类对象)Food meat = new Meat();    // 创建一个肉类食物animal.eat(meat); // 编译通过,但运行时可能崩溃!// 因为Dog的eat()实际需要DogFood参数}
}
  • 预期行为:父类Animaleat()本应处理所有Food类型。

  • 实际行为:子类Dogeat()无法处理Meat,导致运行时错误(如ClassCastException)。

提出一种符合LSP规范的设计方案:使用泛型

// 定义泛型父类,约束食物类型
abstract class Animal<T extends Food> {abstract void eat(T food); // 子类可指定具体食物类型
}// 狗只能吃狗粮(明确声明泛型类型)
class Dog extends Animal<DogFood> {@Overridevoid eat(DogFood food) { // ✅ 输入类型与父类泛型一致System.out.println("狗吃狗粮");}
}

优点

  • 调用方在编译时即可明确Dog需要DogFood,避免了运行时错误。

  • 通过泛型参数传递类型信息,符合LSP的隐式契约。

那么不削弱输出保证也好理解了,可以理解为子类方法的返回值或状态变更不能比父类更宽松。

我们考虑状态变更的例子。比如,父类的方法保证在调用后某个字段不为null,而子类的方法可能在调用后该字段仍为null,这违反了后置条件。针对返回值,比如,父类的方法可能返回一个非空集合,而子类的方法返回了可能为空的集合,这也是后置条件更宽松的情况。举个实际场景的例子——使用银行账户,父类的取款方法保证余额不会透支,而子类的方法允许透支,导致状态变更更宽松,这违反了后置条件。

LSP的核心教训

  1. 子类不能“挑食”:若父类方法接受Food,子类必须同样接受所有Food类型。

  2. 泛型是你的朋友:当需要类型特化时,用泛型在编译期约束类型,而非运行时强制检查。

  3. 契约不可违背:子类必须遵守父类方法的“承诺”(参数范围、返回值、异常等),否则继承关系应被质疑。

http://www.dtcms.com/wzjs/139485.html

相关文章:

  • win7电脑做网站服务器海会网络做的网站怎么做优化
  • 网站建设 时间安排青岛快速排名优化
  • 自己在本地建的网站 别人怎么访问教程软文营销怎么做
  • 微商代理平台seo排名优化软件免费
  • 河北网站制作公司成都疫情最新消息
  • 做电商讲师课程的网站西安关键词优化软件
  • 网站怎么做百度能搜到怎么让客户主动找你
  • 合肥市网站建设公司搭建网站基本步骤
  • 哪个装修公司比较好慈溪seo
  • 服装html网站模板下载google play服务
  • 视频解析网站是怎么做的老铁外链
  • 比较好的网站建设网络营销网站
  • 全美网站建设个人免费网上注册公司
  • 网站开发与应用专业就业方向深圳网络seo推广
  • 网站建设的三个步骤是什么哈尔滨最新消息
  • 官方网站开发哪家便宜今日新闻最新10条
  • 网站 策划一键优化清理加速
  • 重庆网站建设公司名单今天的新闻头条最新消息
  • 网吧网站怎么做的百度动态排名软件
  • 河南住房和城乡建设厅网站宁波seo网络推广渠道介绍
  • 古镇网站建设武汉关键词排名提升
  • 网站建设kaicz怎么看百度关键词的搜索量
  • 风铃网站代做天津网络关键词排名
  • 网站建设 问卷调查推广渠道怎么写
  • 彭阳门户网站建设搜索引擎有哪些软件
  • 网站建设栏目设计最近的电脑培训班在哪里
  • 西安网络广告推广江苏网站seo
  • 大型网站制作都有哪些百度免费
  • 2017网站开发前景完美日记网络营销策划书
  • wordpress dux主题破解安装网站优化 推广