粉丝6.2万获赞71.0万


为什么 java 会有结果的概念?故事得从瞎家说起。假设有个野生动物类 a, 还有个奔跑动物类 b。 如果你想让你写的老虎类既拥有野生动物的特性,也拥有奔跑动物的特性, 那么在习家家中,你可以让这个子类同时继承 a 和 b, 这就叫习家家的多重继承。那么问题来了,如果 a 和 b 都有一个名字一样的方法 it, 那么这个子类究竟是继承了哪个副类的意思呢?这就产生了冲突和起义。 注意哈,为了解决这个问题,抓娃的解决方法是简单而粗暴的,只允许当继承。然而这也意味着多重继承的好处也失去了。所以啊,抓娃为了弥补, 便引入了接口的概念,一个类可以实现多个接口,从而获得不同的行为,同时还可以继承一个负类的特性。比如你可以让这个子类继承野生动物类 a, 同时实现奔跑接口类 b。 值得一提的是,习家家为了这个多重继承的特性,不得不引入一些比如 狙击类、控制规则等复杂的特性。所以你会看到多重继承实际在 ci 应用中很少被使用,而抓瓦的接口由于简单而被广泛使用。

先看单读,我当时直接,好家伙,那这哥们跟我吐槽说写了五年 java, 今天去面试居然被问什么是多肽?那关键是这种基础中的基础他还没打上来。我一直以为这种题只有十亿声效噪才会被问, 结果我去面试呀,看了一圈评论,发现一堆人都在海南,有人说学了一年,今天才真正理解多肽,还有人说写了四年代码,现在再看,居然还有新收获。所以今天我们不兜圈子,把多肽说透,让你以后面试不再翻车。 那翻译成人话就是八个字,一个指令,多种表现。 比如你写代码 animal a 等于 new dog, 那 左边是爸爸 animal, 右边是儿子 dog, 你 调用 a 点 salt, 虽然你拿着爸爸来引用,但 jimmy 会在运行时自动识别他是只狗,于是说出,汪汪。如果你把右边换成 cat, 他 就说出喵喵,那这就叫做你只管发指令。那具体怎么干,让指令自己去决定。那这里送给大家一个底层口诀,专门解决那些骚扰的鄙视点。 翻译看左边,运行看右边,编辑器,根据左边的复列,看到你能调用哪些方法,那真正执行时, jimmy 根据右边的实际对象,把虚方表里的子类版本找出来跑。 这时候有同学要问了,搞这么复杂干嘛?那直接用纸叠不香吗?兄弟,多肽不是为了秀操作,是让你少改代码少加班。你想啊,今天系统里有猫有狗,那明天产品经理脑子一热,非要加个猪?如果你没有多肽,你要到处改一副钥匙, 那有了多肽,你只需要先写一个 pick 类继承 animal 就 行了,原来的业务代码一行都不用动,直接兼容。那这就是架构里常说的对扩展开放,对修改关闭。那么实现多肽有三件事必须满足,第一,有继承或时间关系,那第二,子类重写方法,第三,父类引用指向子类对象,缺一不可。这 三点拍在桌上。再补一句,结偶和扩展性,那面试官基本没得挑。好了,最后问大家一句,你们觉得这题问的有意义吗?那多肽在实际工作中常用吗?评论区告诉我,我们下期见。