hi,你好!欢迎访问本站!登录
本站由网站地图腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

里式替代准绳——面向对象程序设计准绳

2019-11-18杂谈搜奇网30°c
A+ A-

目次

  • 定义
  • 意义
  • 做法
  • 实践
    • uml图
    • 代码部份

github堆栈

定义

Liskov于1987年提出了一个关于继续的准绳“Inheritance should ensure that any property proved about supertype objects also holds for subtype objects.”—— 继续必需确保超类所具有的性子在子类中依然建立.。浅显的来说就是子类能够扩大父类的功用,然则不能转变父类原有的功用。

该准绳称为Liskov Substitution Principle——里氏替代准绳。

里氏替代准绳重要论述了有关继续的一些准绳,也就是什么时刻应当运用继续,什么时刻不应当运用继续,以及个中包含的道理。里氏替代原是继续复用的基本,它反应了基类与子类之间的关联,是对开闭准绳的补充,是对完成笼统化的具体步骤的范例。

意义

  1. 防备重写父类要领,涌现父类复用性差的状况。

  2. 顺序运转正确性的保证,即类的扩大不会给体系带来新的毛病,降低了失足的可能性。由于子类重写了父类要领,在运用多态特征时,顺序可能会涌现不可预知的毛病。

做法

  • 子类能够完成父类的笼统要领,但不能掩盖父类的非笼统要领。

  • 子类中能够增添本身特有的要领。

  • 当子类的要领重载父类的要领时,要领的前置前提(即要领的形参)要比父类要领的输入参数更宽松。

  • 当子类的要领完成父类的笼统要领时,要领的后置前提(即要领的返回值)要比父类更严厉。

实践

在好汉同盟中,每一个好汉到了6级都邑具有大招,大招的结果跟着好汉品级提拔而提拔,盲僧的大招有危险,杰斯的大招只是切换形状,没有危险。我们在杰斯类中掩盖了父类的要领,致使挪用getrDPS()要领涌现了意料之外的毛病。

(后话系列)关于这类状况我们应当将Hero再细分为两种子类,一种是大招有危险范例,一种是无危险范例,LeeSin和Jess离别继续他们,将Hero做成顶级类,只具有治理品级的功用。

uml图

代码部份

好汉基类

/**
 * 好汉基类
 */
public class Hero {
    /** R 妙技危险 */
    private double rDPS;

    /** 好汉品级 */
    private int clas;

    public void setClas(int clas){
        this.clas = clas;
    }

    /**
     * R妙技陪伴品级的变化
     */
    public void getrDPS(){
        rDPS = 2100 / clas * 3.97;
        System.out.println("R妙技的危险为" + rDPS);
    }
}

盲僧

/**
 * 盲僧
 */
public class LeeSin extends Hero{}

杰斯

/**
 * 杰斯
 */
public class Jess extends Hero{
    @Override
    public void setClas(int clas) {
        System.out.println("虽然我到6了,但咱大招么得危险呀,就不必传值品级了,横竖也没用");
    }
}

测试类

public class Main {
    public static void main(String[] args) {
        Hero leeSin = new LeeSin();
        leeSin.setClas(6);
        leeSin.getrDPS();

        Hero jess = new Jess();
        jess.setClas(6);
        jess.getrDPS();
    }
}

由于杰斯大招没危险,重写了父类的setClas(int clas)要领没有为clas赋值,故而在盘算R妙技危险时发生了除零非常。

R妙技的危险为1389.5
虽然我到6了,但咱大招么得危险呀,就不必传值品级了,横竖也没用
Exception in thread "main" java.lang.ArithmeticException: / by zero
  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
里式替代准绳——面向对象程序设计准绳

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282252.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>