继承你不知道的奥秘(《继承》)

createh53个月前 (02-01)技术教程29

东风系列导弹是镇国神器。东风41不是突然就造出来的,之前有很多种东风xx导弹,每种导弹都有自己的独特之处,相同之处都具备导弹基本特点。很多工厂有量产磨具的生产线,盖房子就图纸,建筑设计建设都有参考,小到分子、原子,大到地球、星系、宇宙,似乎东西都是类似的,有的又有点不同。继承也是宇宙的本质,也是人类社会的本质,编程语言只不过发现了这个本质,程序员可以创造一个又一个相同、相似或差异甚远的实例,完成需求和功能。

单继承和多继承

狭义的多继承代表继承多个类,而非继承接口,一般提到多继承都是指狭义的多继承。大多编程语言为了简化多继承带来的复杂度,使用接口(interface)或特性(traits).

  • C++是为数不多支持多继承的编程语言。
  • Python也支持多继承,若未指定父类名称,访问父类相同方法名会按照继承父类的顺序依次搜素。
  • Java/C#只支持单继承,用接口实现"多继承"。
  • PHP 5.0引入接口,5.4引入traits.

多继承的困扰

  • 小明有时很困扰,自己的脾气很倔,妈妈说这像他爸,他爸说像他姥姥,大家都要面子,一家人吵的不可开交。
  • 有人说自己是朱元璋18代后代,列出长相哪里哪里像,大部分人无法分辨,因为继承太长了,溯源也找不到实证。
  • 近亲的后代更高概率产生基因缺陷,多继承同样会继承多个父类"不好"的地方,编程语言更倾向继承一个"优秀"类,继承后进一步优化子类,实现真正"优生"。

多继承策略

多继承产生一个很大的问题,继承自不同父类或父父类的相同函数以哪个为准。

  • C3线性化理论是计算机编程中用于在多继承时确定继承的方法顺序。
  • Python引入了Mix-in混入类实现更优雅的多重继承。
  • Vue同样也有Mix-in概念。

继承的访问权限

  • C++提供了private/protected/public三种继承方式,比较复杂。Java/C#/Python仅有(?)public继承,默认不需要显式指明。
  • Python默认会继承父类的属性和方法,但不能继承父类私有的属性和方法(以两个下划线开头)。

继承的形式

  • ObjC、C++和C#用冒号分隔子类和父类。
  • Java用extends关键字。
  • Python用括号将父类包起来,形如class Base(Derived).

若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

相关文章

一文讲透父子类中静态变量,成员变量初始化顺序原理

推荐:从面试到入职到离职,我在B站工作的30天时光 爱了爱了,Alibaba顶级MySQL调优手册到手,加薪妥了 爱了爱了,Spring Cloud Alibaba内部微服务架构笔记真的太牛了 本文主...

产品设计阶段:To B软件产品设计流程总结

到了产品设计阶段,大部分产品经理(尤其是技术转型的产品经理)终于可以大大的喘一口气了,这个阶段的工作应该是产品人最最熟悉的环节了。网上关于产品设计(我总觉得这个叫需求分析)的方法论还真是多的很,场景分...

深度分析:理解Java中的多态机制,一篇直接帮你掌握

Java中的多态1 多态是什么多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。用白话来说,就是多个对象调用同一个方法,得到不同的结果。...

JAVA学习基础之JAVA类集(java类中的类)

第十三章、JAVA类集在JAVA中必须掌握的知识点,会开发的:1、面向对象; 2、JAVA的类集; 3、JAVAIO; 4、JDBC;13-1、认识类集、Collection接口类集实际上就是一个动态...

JAVA集合系列分享-ArrayList(java集合超详解)

Collection学习分享:集合在我们日常开发中是经常用到的,用来存储一些对象,借助jdk提供的集合我们可以很方便的进行一些遍历,查找,删除,排序等操作(jdk版本为1.8)。首先简单学习下Arra...

面试官问:SpringBoot是什么时候初始化Spring上下文容器的?

点击右上角“关注”,立即查看“Spring-Boot源码分析”系列所有文章。本文是源码分析系列:SpringBoot启动流程的第五篇,主要包含以下源码分析:prepareEnvironment():准...