## 继承关系
1.子类想要继承父类,通过extends关键字来实现
2.子类继承了父类,可以调用父类中(public protected)的属性和方法
2.1构造方法严格意义来说 不算做子类继承过来
只是单纯的在子类调用构造方法时默认调用父类的构造方法
2.2程序块严格意义来说 不算做子类继承过来(子类自己调用不到 没名字)
程序块子类不能直接调用 子类执行构造方法之前
默认调用了父类的构造方法 父类构造方法之前自动执行父类的块
3.子类除了能继承父类的属性和方法外,子类还可以添加自己独有的成员(属性 方法)
4.当父类继承过来的方法无法满足子类的需要,可以进行方法重写(override)
4.1关于 方法重写(override) 和 方法重载(overload)区别
类 继承关系两个类 一个类
权限 子类可以大于等于父类 没有要求
特征 final static abstract 没有要求
父类是final 子类不能重写
父类是static 子类不存在重写
父类是abstract 子类必须重写 否则子类也得是抽象类
返回值 子类可以小于等于父类 没有要求
方法名 子类必须与父类一致 几个方法的名字必须一致
参数 子类必须与父类一致 几个方法的参数必须不一致(个数 类型 顺序)
异常 编译时 运行时 没有要求
如果父类抛出运行时 子类可以不予理会
如果父类抛出编译时
子类抛出异常的个数要少于等于父类
子类抛出异常的类型要小于等于父类
方法体 通常方法体执行与父类不一致 通常几个方法之间执行不同的操作
5.每一个类都有继承类,若定义了extends关键字,则直接继承
该类(间接继承Object),若没有定义extends,则默认继承Object
Object类很重要,他是所有引用类型的父类,Object类是没有父类的
Object类中的方法
*equals() *hashCode() *toString()
getClass()
wait() notify() notifyAll()
finalize() clone() 这两个方法都是protected修饰符
注意:希望大家记忆 方法名字 方法参数 方法返回值 方法是否存在重载
最好常用的方法需要知道他的源代码如何实现
6.Java中类的继承是单继承,指的是一个extends关键字后面只允
许写一个类,可以通过传递的形式来实现多继承(后续多实现)
7.深入理解继承在内存中的存储结构
8.this与super关键字的区别
this和super都是代替对象
this代替的是执行属性或方法时的当前这个对象
super代替的是当前对象的父亲对象
this和super都可以调用一般的属性或方法,放置在类成员的任意位置
方法之间是可以来回调用(编译好用),执行时注意StackOverflowError的问题
this和super都可以调用构造方法,只能放在另一个构造方法第一行
当利用this或super调用构造方法时,他们两个不能同时出现(他们都想抢占第一行,冲突啦)
类的个数变多啦--->需要管理类--->包package(可以理解为是一个文件夹)
在我们类的第一行会出现package关键字
如果package和import同时出现
先写package后写import
package只能有一个 import可以有多个
类的关系
has-a 包含关系(组合 聚合 关联) 语义
从亲密程度来讲不太一样
组合-->人和大脑 人和心脏的关系
整体和部分的关系 不可分割 要出现都出现 要消亡都消亡
聚合-->汽车和车轮子 电脑和主板
整体和部分的关系 创建时有可能是分开的
关联-->人有汽车 人有电脑
整体和部分的关系 可以分割 后来形成在一起
从Java程序来描述这样的关系 通过一个类的对象当做另一个类的属性来存储
use-a(need-a) 依赖关系
屠夫 杀 猪
一个类屠夫
可以做一件事情 杀猪
需要一头猪
不是整体和部分的关系 某一件事情产生了关系
临时组合在一起 这件事情一旦做完关系即解散
Java程序体现的形式为:
一个类的方法中使用到了另一个类的对象
第一个可以在方法中传递参数
第二个可以在方法中自己创建
设计类的关系遵循的原则:高内聚低耦合
耦合度: 紧密 继承(实现) > 包含 > 依赖