继承
面向对象三大特征: 封装 继承 多态
所有的技术都是为了解决问题而存在的
封装:对象代表什么,就得封装对应的数据,并提供数据对应的行为
继承: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这个类
}
继承体系
设计业务架构 画图法
画图:从下往上画,需要把子类中的共性内容抽取到父类中
书写代码:从上往下写
子类到底能继承父类中的哪些内容
虚拟机
类的成员:
- 构造方法 nope (修饰符)非私有 不能 private 不能
- 成员变量 yep 非私有 能 private 能 (继承不等于能调用)
- 成员方法 虚方法表能 否则不能
构造方法
是否可以被继承: 不行,假设继承,则构造方法名与子类名发生冲突,违背了构造方法的定义规则
所以必须要自己手动再写一遍,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() 方法