您的位置:首页 > 编程语言 > Java开发

Java编程思想第四版读书笔记——第七章 复用类

2016-06-20 12:13 323 查看

第七章   复用类

1 组合语法

在类中,创建一个其它类的对象,使用该对象的一些方法,对这个对象进行操作。

类中域为基本类型时能自动被初始化为0,对象引用会被初始化为Null。

初始化类中的引用,可以在四种情况下进行:

1、在定义对象的地方(在类的构造器调用之前就初始化了)

2、在类的构造器中

3、在需要使用这些对象之前(惰性初始化)

4、使用实例初始化

2 继承语法

当创建一个导出类对象时,该对象包含了一个基类子对象。当初始化时,构造器的调用遵循由内到外的顺序,默认情况下调用基类的无参构造器,基类构造器都有参时,可以用super(“参数”)显式的调用基类构造器。

3 代理

当一个类并不是另一个类的子类型,却要完全或部分用到另一个类的全部方法时,可以用代理。

在类Ship中创建另一个类的对象controls,然后构造所需要的全部方法,在方法里只需要使用相应的controls.方法。即可使用对象类的所有方法。

4 结合使用组合和继承

虽然编译器强制初始化基类,但是不强制初始化成员对象,所有在用组合的时候应该注意要自己初始化成员对象。

可以使用try finally强制对内存进行回收清理,自己编写函数回收内存,此时回收顺序是由外向内,最后使用super.dispose()回收基类内存。

Java中导出类重载某个基类方法,它并不会屏蔽其在基类中的任何版本,也就是在参数列表类型符合的情况下,基类中的该方法依旧可用。

@override是覆写关键字,如果添加这个注解而错误的重载(没有覆写)该方法,那么编译器会报错。

覆写(override):函数名一样,返回值类型,参数列表类型都一样。子类函数的访问权限不能小于父类。

重载(overlode):函数名一样,参数列表不一样,返回值类型可以相同也可以不同。

以上两种都是程序多态性的体现。

5 在组合和继承之间选择

is-a 继承

hsa -a 组合

6 protected关键字

关键字protected表明,就类用户而言,它是private的,就 继承自此类的导出类 或者 其它位于同一个包的类来说,它是可以访问的。

最好将域保持为private的,保留更改底层实现的权利。然后通过protected方法控制类的继承者的访问权限。

7 向上转型

将导出类转型成基类,继承要慎用,需要向上转型时,推荐使用继承。

8 final关键字

final数据:

对于基本类型,final使数值恒定不变。对于对象的引用,final使引用恒定不变,但是对象自身是可以修改的。注意,数组也是一种引用。

带有恒定初值(即:编译期常量)的final static 基本类型全用大写命名,并且字与字之间用下划线隔开。

必须在域的定义处或者构造器中用表达式对final进行赋值,这真是final域在使用前总是初始化的原因。

final参数:

在函数参数列表中的final参数,在函数内无法修改它。如

f(int i){ i++; } //非法

g(phone mi){mi = new phone();} //非法

final方法:

使用场景:

1、把方法锁定,防止继承类修改,覆盖它。

2、提高效率。(逐渐淘汰)

类中所有的private方法都隐式地指定为final的。因为private方法无法被外界取用,所以并不算基类接口的一部分,所以尽管导出类含有相同名称的方法,但是互不干扰,也没有覆盖。

final类:

使用场景:

不可以作为基类被继承。

9 初始化及类的加载

类的代码在初次使用时才会被加载,通常是指加载发生在创建类的第一个对象之时,在访问static域或static方法时,也会发生加载。

注意,只要加载包含static方法的类,static初始化就会执行。注意子类创建对象调用构造器时基类构造器也会被调用,此时基类会被加载,基类的static将会被初始化。

基类staitic——> 子类static——> 基本类型设为默认值0,对象引用被设为Null——> 基类构造器——>子类构造器

10 总结

优先组合,再考虑继承。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息