【Java】 【面向对象三大特征 封装 继承 代码复用性 单继承 多层继承 间接父类 顶级父类Object extends 设计架构 继承内容 虚方法表】 Notes and Insights 14

继承

面向对象三大特征: 封装 继承 多态

所有的技术都是为了解决问题而存在的

封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为
继承:Person Student Teacher 父类 子类 继承

  • Java中提供一个关键字 extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系
    public class Student extends Person {}
    
  • Student成为子类派生类),Person成为父类(基类或超类)

好处

  • 可以把多个子类中重复的代码抽取到父类中,提高代码的复用性
  • 子类可以在父类的基础上,增加其他的功能,使子类更强大

自己设计 用别人的 继承结构

继承的核心:当类与类之间,1.存在相同(共性)的内容,并满足 2.子类是父类中的一种,就可以考虑使用继承,来优化代码

项目经理要求管理好一个项目就需要 设计结构
具体可以通过内存图,内存分析工具来理解

继承的特点

1、Java中只支持单继承,不支持多继承,但支持多层继承
单继承:一个子类只能继承一个父类
不支持多继承:子类不能同时继承多个父类
多层继承:祖孙三代
间接父类 直接父类
2、每一个类都直接或间接的继承于 Object

public class A extends Object {
    // 如果A没有写父类的话,虚拟机会默认加上Object这个类
}

继承体系
设计业务架构 画图法

画图:从下往上画,需要把子类中的共性内容抽取到父类中
书写代码:从上往下写

子类到底能继承父类中的哪些内容

虚拟机

类的成员:

  1. 构造方法 nope (修饰符)非私有 不能 private 不能
  2. 成员变量 yep 非私有 private 继承不等于能调用
  3. 成员方法 虚方法表能 否则不能

构造方法

是否可以被继承: 不行,假设继承,则构造方法名与子类名发生冲突违背了构造方法的定义规则
所以必须要自己手动再写一遍,o(╥﹏╥)o

成员变量

是否可以被继承:可以继承(但相当于被锁起来的武功秘籍,需要钥匙 get,set方法 打开)
栈与方法 堆与对象 方法区与字节码文件(一个类想要被使用就要加载进方法区)
默认的爹 Object
Zi z = new Zi(); Zi地址变量z 所指向的对象类型限定

一对默认初始化值 null(引用) 与 0(基本)

先找子类存储空间,再找父类存储空间

(.) 的 , 获取

Java虚拟机中有垃圾回收器 自动清理内存
被private修饰,无法直接调用,从而无法赋值,且连null和0都调用不了

成员方法

是否可以被继承:调一个方法,查找15个类,代码运行效率极低
所以Java在底层设置了一个虚方法表****(非private 非static 非final修饰), 用于提高性能
只有父类中的虚方法(非private 非static 非final修饰),才能被子类继承
Object(位于继承树的最顶层)中有5个虚方法

getClass() 方法
hashCode() 方法
toString() 方法
equals() 方法
finalize() 方法

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zanebla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值