文章目录
1.组合语法
- 定义:只需要在新类中产生现有类
- 惰性初始化:先定义引用,在使用对象的时候再进行初始化
2.继承语法
-
定义:按照现有类类型创建新类
-
初始化基类
(1) 除非明确指出从其他类继承,否则就是在隐式的从Java的标准类Object进行继承
(2) extends会自动得到基类中的所有域和方法
(3) 为了继承,一般数据成员都是Private,方法是Public
(4) 可以将继承视作是对类的复用
(5) super表示超类的意思,当前类就是从超类继承来的
(6) Java会自动在导出类构造器中插入基类构造器
(7) 构造过程是“向外”扩散的,所以在导出类访问到积累之前,就已经完成了初始化
(8) 基类构造器总是被调用,并且在基类之前被调用
(9) 如果要调用有参的基类构造器,就要使用Super()关键字显示的调用基类构造器,并配以适当的参数列表
3.代理
- 在新类中,通过创建目标类对象在新类的方法中调用目标类的一些方法,以此方式不暴露目标类的方法
4.结合使用组合和继承
-
确保正确清理
(1) 先执行类的清理方法,再执行基类的执行方法
(2) 最好除了内存意外,不依赖垃圾回收器,但不要使用finalize() -
名称屏蔽
(1) 无论在本类中还是在基类中,重载机制都可以正常工作
(2) @Override可以防止你在不想重载的时候不小心重载(报错:method dose not override a method from its superclass)
5.在组合和继承之间选择
- 组合:现在新类中使用现有类的功能,而非它的接口(has-a)
- 继承:使用某个现有类,并为了某种特殊需求而将其特殊化(is-a)
6.Protected关键字
- 对于任何继承此类或位于同一包内的类来说是可以访问的,但对于类用户来说是Private的
7.向上转型
-
新类是现有类的一种类型
-
将新类引用转换成现有类引用的动作,叫做向上转型
-
为什么称为向上转型
(1) 由导出类转向通用类转型,在继承图上是向上移动的
(2) 因为是从专用类转型通用类,所以是安全的
(3) 类接口唯一会发生的就是丢失方法 -
应该用组合还是继承?
(1) 如果必须向上转型,就要用继承
(2) 如果不需要向上转型,就不需要继承
8.Final关键字
-
final数据
(1) 一个永远不改变的编译时常量
(2) 一个运行时被初始化的值,而你不希望它被改变
(3) static final的域只占用一段不能改变的存储空间
(4) 带有恒定初始值(编译期常量)的 static final 基本类型全用大写字母命名,且字与字之间用下划线隔开
(5) 使引用成为final没有使基本类型成为final的作用大
(6) 空白final 声明为final,但是未给定初始值
(7) final参数
Java允许在参数列表中声明的方式将参数指明为final(你可以读参数,但是不能修改参数)
-
final方法
(1) 锁定方法
以防任何继承的方法修改它的含义
(2) 效率
把方法加上final关键字,就意味着同意编译器针对这个方法的所有调用转为内嵌调用
-
类中所有的private方法都隐式的指定为final
-
“覆盖”只有在某方法是基类的接口的一部分时才会出现
-
final类
当某个类被定义为final的时候,表明无法被继承