类和类之间的关系
A is-a B 泛化(继承 实现)
A has - a B 包含(组合 聚合 关联)
A use-a B 依赖 (need-a)
继承 is-a
子类继承父类, 通过关键字:
extends
- 子类在被实例化时,父类也被间接的实例化(体现在父类的构造方法被执行了)
子类可以调用父类中的
(public protected)
属性和方法子类可以拥有自己的属性和方法
子类可以重写父类的方法
- 权限可以大于等于父类
特征:
- final: 子类不能重写
- static: 子类不存在
- abstract 子类必须重写 (子类是具体必须重写 否则子类是抽象类 可以不重写)
- 返回值: 子类可以小于等于父类
- 名称: 子类与父类一直
- 参数: 子类与父类一致
异常: 运行时、编译时
- 父类方法抛出运行时异常, 子类可以不予理会
- 父类方法抛出编译时异常:子类抛出异常个数小于等于父类、子类抛出异常的类型小于等于父类
每个类默认继承Object类
Java中继承是单继承: 每一个只能有一个直接继承类(extends关键字后面只能写一个类)
- 可以通过传递的方式实现多继承的效果 后续还会有多实现
继承在内存中的存储形式
this(代替是当前调用方法属性时的那个对象 不一定是当前类的对象, 父类的this指向实例,方法重名时 在父类this调用方法时 也是通过继承链的起始点寻找该方法,通过 super.xxx() 可以调用父类方法 )
this和super在构造方法中调用另一个类的构造方法不能同时出现在第一行
构造方法之间不能来回互相调用(编译时异常)
Object 类中的方法 | — |
---|---|
hashCode() | 将对象在内存中的地址经过计算得到一个int整数 |
equals() | 用来比较两个对象的内容 默认效果: === equals方法是Object继承过来的方法, 默认效果比较地址 |
toString() | |
getClass() | 获取对象对应类的类映射(反射 )(类模版) |
wait() | 线程进入挂起等待状态 存在方法重载 |
notify() | 线程唤醒 |
notifyAll() | 唤醒所有 |
finalize() | 权限修饰符是protected 在对象被GC回收的时候 默认调用执行的方法 |
close() | 权限修饰符是protected 为了克隆对象 |
public class Person extends Animal{
}