提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、继承
  • 二、就近并行、同父滞后
    • 1.就近并行
    • 2.同父滞后

前言

复杂继承关系时,顺口溜:多父类继承时,就近并行,同父滞后。

一、继承

避免重复创建构造方法,提高构造方法的复用。且类与类之间存在层级关系时,往往使用继承的方法来创建新的类。
如父类:

class A:  def __init__(self):print('A')

子类1:

class B(A):print('B,不对父类构造方法做处理')

子类2:

class B(A):def __init__(self):   # 对父类的__init__方法进行重写print('B,对父类__init__做改造')


子类3

class B(A):def __init__(self):print('B,对父类__init__做改造')super().__init__()  # 继承后,可以用super()方法调用父类中的构造方法

此时我们实例化子类1时,会调用到父类中的构造函数。如果实例化子类2时,则会重写父类的__init__方法,子类3super()再次调用父类的__init__方法。

二、就近并行、同父滞后

1.就近并行

class A:def __init__(self):print('A')class C(A):def __init__(self):print('C')super().__init__()class D(A):def __init__(self):print('D')super().__init__()class G(C, D):def __init__(self):print('G')super().__init__()G()


如上,输出结果为GCDA,当子类继承多个父类时,从子类开始,从左到右,最近的一个父类开始执行,但多个父类继承关系是并列的,交换G中(C,D)为(D,C)时,输出顺序也会变化,但是初始化的时候不会先把C初始化完毕才初始化D.
感兴趣可以自己尝试一下后者。

2.同父滞后

class A:def __init__(self):print('A')class B(A):def __init__(self):print('B,对父类__init__做改造')super().__init__()  # 继承后,可以用super()方法调用父类中的构造方法class C(A):def __init__(self):print('C')super().__init__()class D(A):def __init__(self):print('D')super().__init__()class E(B, C):def __init__(self):print('E')super().__init__()class F(C, D):def __init__(self):print('F')super().__init__()class G(E, F):def __init__(self):print('G')super().__init__()G()

以上存在着复杂的继承关系,从G类来看,就近并行,打印出G后会先打印E类的E,由于E类与F类不同父,所以会继续执行E类的父类B,此时会打印出B,B类的父类A与F类的父类C的父类A相同,所以G-E-B-A的A类暂时搁置。所以并行F类打印F以及F的就近父类C,打印C,但C类与D类又并列,所以此时打印D,最后打印大家都相同的最终父类A

总结如下图,能力有限,尽力理解!

super()继承关系总结相关推荐

  1. java 继承先后顺序_Java中的继承关系的加载顺序

    /* 在加载类时,Java虚拟机先加载父类再加载子类,再对静态初始化块. 静态成员变量(类变量).静态方法进行一次初始化. 只有调用new方法时才会创建类的对象.按照父子继承关系进行初始化, 首先执行 ...

  2. android context继承关系,android中Context深入详解

    以下分别通过Context认知角度,继承关系,对象创建等方面android中Context做了深入的解释,一起学习下. 1.Context认知. Context译为场景,一个应用程序可以认为是一个工作 ...

  3. 【Java3】封装,对象数组,构造器,this/super/继承,抽象

    文章目录 1.封装:数据抽象 2.对象数组:先new 3.构造器:不写也有无参构造 3.1 数组工具类:return 3.2 冒泡排序应用:sort,temp 4.this/super/继承:多重,匿 ...

  4. Java反射-继承关系

    目录 反射类型继承关系图 类 Type ParameterizedType TypeVariable WildcardType GenericArrayType Annotation Annotate ...

  5. Android如何给无法更改继承关系的Activity更换ActionBar(setContentView方法实战)

    前言: 通常我们有时候会直接使用ADT工具直接新建一个Activity页,而这个Activity我们又无法更改它的父类,那遇到这种情况该如何处理呢?其实很简单,好,看如何来解决这个问题: 先来看看这个 ...

  6. python类中的函数调用关系_Python中类的内置方法与继承关系实例

    1.类的内置方法 Python内部类: 所谓内部类,就是在类的内部定义的类,主要目的是为了更好的抽象现实世界. 例子: 汽车是一个类,汽车的底盘轮胎也可以抽象为类,将其定义到汽车内中,而形成内部类, ...

  7. android context继承关系,Android - 认识Context

    app开发中,我们需要使用app的资源,比如文字.图片,Activity.Service或者broadcastReceiver等等.时常也会用到getApplicationContext()来获取一个 ...

  8. 关联关系,继承关系,多态

    文章目录 关联关系 继承关系 类装饰器 多态 单例模式 关联关系 知识点: 1.has a 一个类中使用了另一个自定义的类型 student使用了computer book 2.类型 系统类型: st ...

  9. 13.类的关系——继承关系

    13.类的关系--继承关系 1.继承关系 1.1 继承的概念 ·继承机制是面向对象程序设计不可缺少的关键概念,是实现代码可重用的根基,是提高软件系统的可拓展性与可维护性的主要途径. ·所谓继承是指一个 ...

最新文章

  1. linux驱动编程入门实例
  2. 这个为生信学习打造的开源Linux教程真香!!!
  3. 黄聪: bootstrap 多模态框实现
  4. 线性表及其逻辑和存储结构(二级)
  5. python如何卸载模块cmd_使用cmd python模块时,如何使程序正常崩溃?
  6. 让电脑开机时直接登录
  7. HTML5 VIDEO标签播放事件流水
  8. 在WinCE5.0和WinCE6.0下,编译选项介绍
  9. Pandas知识点-索引和切片操作
  10. 随想录(代码优化中的两个问题)
  11. 零基础适合学python吗-零基础,经济学专业,适合自学Python吗?
  12. python扫雷脚本_Python自动扫雷实现方法
  13. 自动化技术、计算机技术核心期刊整理及介绍
  14. dub怎么生成这么大的垃圾呢.
  15. matlab绘制香农定理曲线,基于matla对香农公式仿真.doc
  16. 易经- 第一卦 乾卦
  17. linux下的触摸板关闭
  18. 基于Android开发的手持扫码枪APP(附带参考源码)
  19. 一元三次函数的最值计算
  20. 《设计模式》——开闭原则

热门文章

  1. XGBoost Stopping to Avoid Overfitting(early_stopping_rounds )
  2. 只读ppt如何获得可编辑版本?
  3. 基于SSM抑郁症自检测及初级自治疗网站的设计实现
  4. 计算机 常用的逻辑运算有哪些,常用布尔逻辑运算符有哪些
  5. 我的世界服务器指令修复耐久,我的世界修改装备耐久度指令 | 手游网游页游攻略大全...
  6. window8系统 dns有问题怎么修复,浏览器代理设置,浏览器提示网页无法显示
  7. 男人为什么离不开酒?(写的太好了,句句入骨)
  8. Android四大组件之一服务(Service)
  9. [宋史学习] 三省六部制的破坏与宋初的中央政府机构
  10. rectpuls函数 matlab,Matlab中的rectpuls函数解析