美文网首页
程序员修炼32 mixin

程序员修炼32 mixin

作者: 大笑的篷蒿人 | 来源:发表于2022-02-24 21:46 被阅读0次

    一直觉得对大部分的编程相关名词还是挺有概念的,今天来了一个之前没见过的,有点汗颜了。

    想办法搞搞清楚,书上前后读了几遍还是有点一知半解,幸好还有百度和知乎,研究一下。搞清楚了一个大概。

    说这个概念来自哪里?来自多重集成,多重继承本身有一些逻辑上的瑕疵:

    优先顺序模糊:假如我有A,C类同时继承了基类,B类继承了A类,然后D类又同时继承了B和C类,所以D类继承父类的方法的顺序应该是D、B、A、C还是D、B、C、A,或者是其他的顺序,很不明确。
    功能冲突:因为多重继承有多个父类,所以当不同的父类中有相同的方法是就会产生冲突。如果B类和C类同时又有相同的方法时,D继承的是哪个方法就不明确了,因为存在两种可能性。

    这些瑕疵主要来自方法实现层面,那么解决上面这个问题最简单的方法就是去掉方法层面的继承,只继承规格,在Java中就是interface,因为实现都是自己干,即使实现了多个有相同方法的接口时,区分实现的方法到底来自哪个接口就不重要了。

    这是一个相当清楚的设定,可是程序员就是一个搞脑子的群体,接下来又有人想了,那在这种情况下我难道就不能有个默认的实现?同样的逻辑非要重新写?好吧mixin的概念就出现了。类似的概念在Java8中就变成interface的默认实现。

    jdk8 中,接口可以包含实现方法,需要使用 default 修饰,此类方法称为默认方法。默认方法在接口中必须提供实现,在实现类中可以按需重写。默认方法只能在实现类中或通过实现类对象调用。注意:当多个父接口中存在相同的默认方法时,子类中以就近原则继承。

    不过有一点没看懂得地方是接口可以实现类多继承的,但是去掉了实现以避免多重继承的问题,当把接口实现加回来之后,似乎多重继承的问题也就回来了,比如上面的最后一句注意。感觉还是有点乱,没太搞明白,明天继续问师父...

    还是参照前一条规则少用继承,更别说多层继承了。

    相关文章

      网友评论

          本文标题:程序员修炼32 mixin

          本文链接:https://www.haomeiwen.com/subject/sretrrtx.html