美文网首页Java 杂谈Java刻意练习:每天一张思维导图(IT类)
《Java编程的逻辑》笔记 16 - 继承的细节

《Java编程的逻辑》笔记 16 - 继承的细节

作者: 天一方蓝 | 来源:发表于2019-05-26 23:31 被阅读3次
继承的细节.png

构造方法

  • super
    (1)子类可以通过super(...)调用父类的构造方法
    (2)果子类没有通过super(...)调用,则会自动调动父类的默认构造方法
    (3)没有默认构造方法。它的任何子类都必须在构造方法中通过super(...)调用Base的带参数构造方法

  • 构造方法调用重写方法

    image.png
    image.png image.png

输出结果是:0 123

第一次输出为0,第二次为123。第一行为什么是0呢?第一次输出是在new过程中输出的,在new过程中,首先是初始化父类,父类构造方法调用test(),test被子类重写了,就会调用子类的test()方法,子类方法访问子类实例变量a,而这个时候子类的实例变量的赋值语句和构造方法还没有执行,所以输出的是其默认值0。
在父类构造方法中调用可被子类重写的方法,是一种不好的实践,容易引起混淆,应该只调用private的方法。

重名与静态绑定

(1)子类可以重写父类非private的方法,当调用的时候,会动态绑定,执行子类的方法
(2)重名是可以的,重名后实际上有两个变量或方法。对于private变量和方法,它们只能在类内被访问,访问的也永远是当前类的,即在子类中,访问的是子类的,在父类中,访问的父类的,它们只是碰巧名字一样而已,没有任何关系。
(3)对于public变量和方法,则要看如何访问它,在类内访问的是当前类的,但子类可以通过super.明确指定访问父类的。在类外,则要看访问变量的静态类型,静态类型是父类,则访问父类的变量和方法,静态类型是子类,则访问的是子类的变量和方法

例:


image.png
image.png
image.png

输出


image.png

当通过b (静态类型Base) 访问时, 访问的是Base的变量和方法,当通过c (静态类型Child)访问时, 访问的是Child的变量和方法, 这称之为静态绑定, 即访问绑定到变量的静态类型, 静态绑定在程序编译阶段即可决定, 而动态绑定则要等到程序运行时。 实例变量、静态变量、静态方法、private方法,都是静态绑定的。

重载和重写

  • 重载
    重载是指方法名称相同但参数签名不同(参数个数或类型或顺序不同)
  • 重写
    重写是指子类重写父类相同参数签名的方法
    当有多个重名函数的时候,在决定要调用哪个函数的过程中,首先是按照参数类型进行匹配的,换句话说,寻找在所有重载版本中最匹配的,然后才看变量的动态类型,进行动态绑定

父子类型转换

(1)向上转型
子类型的对象可以赋值给父类型的引用变量
(2)向下转型?
语法上可以进行强制类型转换,但不一定能转换成功

个父类的变量,能不能转换为一个子类的变量,取决于这个父类变量的动态类型(即引用的对象类型)是不是这个子类或这个子类的子类。
例:
可以


image.png

不可以


image.png
  • instanceof


    image.png

从而安全的进行类型转换
instanceof前面是变量,后面是类,返回值是boolean值,表示变量引用的对象是不是该类或其子类的对象

继承访问权限 (protected)

(1)不能被外部任意访问,但可被子类访问
(2)还表示可被同一个包中的其他类访问,不管其他类是不是该类的子类
(3)模板方法在很多框架中有广泛的应用,这是使用protected的一个常用场景

可见性重写

重写时,子类方法不能降低父类方法的可见性
不能降低是指,父类如果是public,则子类也必须是public,父类如果是protected,子类可以是protected,也可以是public,即子类可以升级父类方法的可见性但不能降低
"is-a"的关系
即子类对象也属于父类,子类必须支持父类所有对外的行为
防止继承 (final)
默认情况下都是可以被继承的,但加了final关键字之后就不能被继承了

写在最后

都看到这里,保存思维导图,顺便给个赞呗!

相关文章

  • 《Java编程的逻辑》笔记 16 - 继承的细节

    构造方法 super(1)子类可以通过super(...)调用父类的构造方法(2)果子类没有通过super(......

  • JAVA语言第二课

    JAVA面向对象——四大特征 继承篇——extendsJava 继承继承的概念继承是java面向对象编程技术的...

  • 《Java编程的逻辑》笔记15--初识继承和多态

    继承 继承概念(1)计算机程序经常使用类之间的继承关系来表示对象之间的分类关系(2)在继承关系中,有父类和子类,父...

  • 《Java编程的逻辑》笔记引言

    一丶为什么分享这本书 1.这本书写的好本书从基本概念到高层框架,剖析Java实现原理与JDK源代码,融合专业理论与...

  • JavaSE基础知识学习-----多态

    多态 Java面向对象编程有三大特性:封装,继承和多态封装隐藏类的内部具体实现机制,保护数据,对外界隐藏内部细节,...

  • java中四大特性继承

    Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类...

  • java面向对象

    java继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。 继承就是子类继...

  • 《Java编程的逻辑》笔记 17 - 继承实现的基本原理

    例子 base类 子类 main方法 输出结果 ---- new Child()基类静态代码块, s: 0子类静态...

  • Java编程的逻辑

    零 概述 本篇文章是读《Java编程逻辑》的笔记 第一部分 编程基础与二进制 第1章 编程基础 为了操作数据方便,...

  • Java编程的逻辑

    1.在设计时,每个类封装其内部细节,对外提供高层次的功能,使其他类在更高层次上考虑和解决问题,是程序设计的一种基本...

网友评论

    本文标题:《Java编程的逻辑》笔记 16 - 继承的细节

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