07 复用类

概述:代码复用的两种常用方式是组合和继承,它们都是利用现有类型生成新类型。


1、组合和继承介绍

1)组合

      通过不同的类型组合形成一个新的类型,实现参与组合的类型代码的复用。

       

2)继承

      通过子类继承父类实现父类代码复用。

      

note:

①除非明确的指定继承的类,否则所有的类将默认继承于Object;

②protected修饰符,在继承的情况下,父类成员可以被子类对象直接使用,不需要实例化父类对象后才能进行访问。

③通过继承,引出向上转型,子类可以自动实现向上转型。

③通过继承可以实现多态。


组合vs继承:优先选用组合。

2、初始化引用

在《05初始化与清理》中谈到了类的初始化,以及类的各个成员的初始化顺序。
我们知道类的基本类型成员变量默认初始化值,当时引用类型成员变量默认是null(原因是:没有在编译时,为引用类型默认值增加不必要的负担)。

初始化引用类型有4个位置:
1)在定义的对象的地方。意味着在构造方法调用之前初始化。
2)在类构造器中初始化;
3)在使用的时候进行初始化。这种方式称为惰性初始化,可以减少外额的负担。
4)使用实例初始化;

类的实例化:是调用了构造方法。
值得注意的是:调用自己的构造方法之前,先默认调用父类的构造方法。可以使用super关键字显式的调用父类的构造器。

3、类与类的第三种关系-代理

代理是组合和继承的中庸之道。主要的好处是:可以避免对外的接口直接暴露。用的不是很多。

4、结合使用组合和继承

我们可以结合使用组合和继承,实现代码的复用。

5、选择组合的原则

判断:组合技术通常是使用现有类的功能而非它的接口。换一句话:看重的是新类型本身,而非是原有类型。

6、super关键字

可以同super关键字调用父类成员。


7、final关键字

final的作用:设计与效率。
final可以用于:数据、方法、类。(数据不可改变,方法不可覆盖、类不可继承)
注意:不要用final修饰接口。String是final类。

7.1final数据

作用:
1.永不改变的编译时常量;
2.一个在运行是被初始化的值,而你不希望它改变;

说明:一个既是static又是final的数据,只 占据一段不能改变的存储空间。定义时保持大写风格,且单词与单词之间用下划线隔开。

7.1final数据初始化

总结:要么在构造方法中初始化,要么到定义处初始化。

说明:final变量只能被初始化一次,否则报错。初始化之后不能改变其初始值。

7.2final参数

java允许在参数列表中以声明的方式将参数指明为final。意味着你不能改变参数所指向的引用。


note:内部类涉及到的final参数:

7.3final方法

使用final修饰方法的2个原因:
1)方法锁定。防止继承类进行修改。常用原因。
2)效率。final的方法编译器都使用内嵌调用。

说明:抽象方法不能用final修饰。

7.4final类

使用final修饰的类,是不能被继承的,被称为“最终类”。String是final类。

8、初始与类的加载


// 结论1:有继承关系的类加载初始化
// ①先执行父类的static代码块,然后子类的static代码块;
// ②先执行父类的代码块,然后父类的构造方法;
// ③先执行子类的代码块,然后子类的构造方法;

结论2:单个类的初始化
总:先加载后初始化,在调用构造方法(只用被定为static,均在类加载阶段完成)。
//成员变量先于构造方法调用
//静态的成员先于普通的成员
//成员变量与代码块的顺序,定义的先后位置决定(静态的也一样)。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值