• 俊杰
    2019-12-20
    BException应该是AException的子类,否则当使用子类替换父类后,抛出的BException无法被catch(AException e)语句捕获

    作者回复: √

    
     8
  • 观弈道人
    2019-12-20
    BException应该是AAexception的子类
     1
     6
  • 一步
    2019-12-21
    里氏替换原则 要求子类可以无缝的替换父类,比父类更松。

    但是在实际的开发中,往往是子类比父类更加严格,细化到适合使用在某一应用场景下,目的性越来越明确

    父类的设计只是一个比较宽松的限制,子类继承然后重写在某一具体场景下的逻辑
    
     4
  • 苏志辉
    2019-12-20
    BExpection应该是AExpection的父类,子类不能比父类抛的更广,否则,使用父类的地方没法处理
     1
     4
  • 陈小龙 Cheney
    2019-12-20
    BException应该是AException的子类。
    因为子类必须能够替换掉父类,因此子类抛出的异常,原先处理父类的代码必须能够处理。那么子类抛出的BEception就应当是AEception的子类,才能被处理父类异常的代码正确处理。
    
     2
  • 靠人品去赢
    2019-12-23
    老师你看一下,能不能长方形继承正方形,既然正向不行,那就反向操作。
    正方形作为父类,它更严格,长方形作为继承,正方形获取边长getLong(),长方形是getLong(String
     type)。

    作者回复: 亲,不建议继承具体类呢,优先考虑组合而不是继承具体类~

    
     1
  • Jawohl
    2020-02-01
    栈stack的数据存储特点是FILO,先进后出吧。

    作者回复: 笔误,谢谢指正~

    
    
  • 不记年
    2020-02-01
    子类
    根据里氏变换,父类比子类更严格
    => 子类的方法严格性小于父类的
    => AException 严格性 大于 BException
    => AException 是 BException的父类
    
    
  • gogo
    2020-01-18
    满满的干货

    子类不能抛出比父类无法catch的异常-因此应该要是AException子类

    现实开发中往往经常看到,不同的子类实现了不同的具体方法,而父类只是一个抽象方法。
    在方法入口处传入用父类作为形参来接受参数,而在其中又调用父类.abstractMethod();

    class abstracr A{
        void abstract f();
    }

    class X extneds A {
        void f(){
            pribt("x");
        }
    }

    class Y extends A {
        void f(){
            print("y");
        }
    }

    // test(A a);

    void test(A a){
        a.f();
    }

    老师,这个test(A a); 的使用 ,或者这两个类 X Y, 有违反里氏替换原则吗? (手机输入的)
    展开

    作者回复: 不违法,抽象方法的正确用法。

    
    
  • 晴天
    2020-01-14
    我有一个疑问,关于子类契约应该比父类宽松的疑惑,比如父类是Object,子类是String,这个时候String可以替换掉Object,但是子类不是更严格吗?反过来,如果子类是Object,父类是String,String能做的,Object不一定能做啊。。
     1
    
  • y欧尼酱
    2020-01-11
    根据里氏替换原则,使用者可以在使用父类的地方使用子类替换,那么从契约的角度,子类的契约就不能比父类更严格,否则使用者在用子类替换父类的时候,就会因为更严格的契约而失败。

    子类 override 父类这个方法后,想要将抛出的异常改为 BException
    所以 BException 是AE的子类 才能去替换

    
    
  • 难得糊涂ck
    2020-01-06
    我觉得白马和小马驹集成马没有任何问题,关键是少了一个接口 - 是否可以骑乘
    显然白马可以
    小马驹不可以
    
    
  • QQ怪
    2019-12-30
    懂了,哈哈哈,BException应该是AException的子类,子类不能抛出父类捕获不到异常
    
    
  • Paul Shan
    2019-12-29
    思考题
    BException 要是AException子类或者相同,否则原来catch AException的地方就会捕获不到异常而破坏里氏替换原则。 throw exception和返回一个对象类似。
    
    
  • Paul Shan
    2019-12-29
    里氏替换原则是抽象原则的落地,也就是设计的时候用的是基类,运行的时候使用的是派生类,要求派生类必须完全能够覆盖基类的情景,所有用到基类的地方替换成派生类,程序可以运行无碍。而且派生类和基类的关系是is a 关系,只有这两者都满足,可以考虑使用继承(个人对非接口基础持保留态度)。正方形能不能作为长方形的子类取决于两者提供的公有接口。子类提供的服务不能少于父类,子类返回的类型不能比父类更上层(继承链条中的层次),子类消耗的类型不能比父类更下层(继承链条中的层次)。
    
    
  • 丁丁历险记
    2019-12-26
    笔记
    子类不应有比父类更严格的契约。 里氏替换原则。
    
    
  • Citizen Z
    2019-12-22
    假如 AException extends BException

    Father f = new Child();
    try {
        father.f(); // throws BException
    }
    catch (AException e) {
    }
    // BException escaped

    所以应该是子类应继承父类 Exception,收敛错误,否则子类看起来突破了父类语义范围,即“使用父类的地方将无法使用其他子类”
    展开
    
    
  •  扬帆丶启航 
    2019-12-22
    按照按照里氏替换的原则,BException是AException的父类,这样才能满足在各个情况下都能替换抽象类的方法,如果是AException的子类,可能在某些情况,不满足BException
    
    
  • 一步
    2019-12-21
    LSP(里氏替换原则) 应该还要求参数和返回值也要一致的,要不然子类没办法替换父类
    
    
  • lifuz
    2019-12-20
    BException 应该是AException 的父类,用集合的概念,BException 是大集合,包含AException这个小集合,再按照里式替换原则子类不能比父类更严格,即只能用更大的集合,不能用它的子集
    
    
我们在线,来聊聊吧