Java编程思想之复用类
2017-07-29 12:44
225 查看
使用类而不破坏现有程序代码
两种方式:
①只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所以这种方法称为组合。
②按照现有类的类型来创建新类。无需改变现有类的形式,采用现有类的形式并在其中添加新代码。这种方式称为继承。
初始化引用,可以在下列位置进行:
- 在定义对象的地方,这意味着它们总是能够在构造器被调用之前被初始化。
- 在类的构造器中。
- 就在正要使用这些对象之前,这种方式称为惰性初始化。在生成对象不值得及不必每次都生成对象的情况下,这种方式可以减少额外的负担。
- 使用实例初始化。
Java会自动在导出类的构造器中插入对基类构造器的调用。基类构造器具有执行基类初始化所需要的所有知识和能力。
构建过程是从基类“向外”扩散的,所以基类在导出类构造器可以访问它之前就已经完成了初始化。
如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键字super显式地编写调用基类构造器的语句,并且配以适当的参数列表。
我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承)。
以下介绍了可能用到final的三种情况:数据、方法和类。
一个在运行时被初始化的值,而你不希望它被改变。
对于编译期常量这种情况,在Java中,这类常量必须是基本数据类型,并且以关键字final表示。在对这个常量进行定义的时候,必须进行赋值。
在对对象引用使用final时,只能使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象其自身却是可以修改的。
一个既是static又是final的域只占据一段不能改变的存储空间。
- 把方法锁定,以防任何继承类修改它的含义(使方法行为保持不变,并且不会被覆盖)。
- 过去建议使用fina方法的第二个原因是效率。(现在不再需要使用final方法来优化)
类中所有的private方法都隐式地指定为是final的。可以对private方法添加final修饰词,但这并不能给该方法增加任何额外的意义。
两种方式:
①只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所以这种方法称为组合。
②按照现有类的类型来创建新类。无需改变现有类的形式,采用现有类的形式并在其中添加新代码。这种方式称为继承。
1 组合语法
只需要将对象引用置于新类中即可。初始化引用,可以在下列位置进行:
- 在定义对象的地方,这意味着它们总是能够在构造器被调用之前被初始化。
- 在类的构造器中。
- 就在正要使用这些对象之前,这种方式称为惰性初始化。在生成对象不值得及不必每次都生成对象的情况下,这种方式可以减少额外的负担。
- 使用实例初始化。
2 继承语法
除非已明确指出要从其它类中继承,否则就是在隐式地从Java的标准根类Object进行继承。①初始化基类
当创建了一个导出类的对象时,该对象包含了一个基类的子对象。这个子对象与你用基类直接创建的对象是一样的。二者的区别在于,后者来自于外部,而基类的子对象被包装在导出类对象内部。Java会自动在导出类的构造器中插入对基类构造器的调用。基类构造器具有执行基类初始化所需要的所有知识和能力。
构建过程是从基类“向外”扩散的,所以基类在导出类构造器可以访问它之前就已经完成了初始化。
如果没有默认的基类构造器,或者想调用一个带参数的基类构造器,就必须用关键字super显式地编写调用基类构造器的语句,并且配以适当的参数列表。
3 代理
Java并没有提供对它的直接支持。这是继承与组合之间的中庸之道。我们将一个成员对象置于所要构造的类中(就像组合),但与此同时我们在新类中暴露了该成员对象的所有方法(就像继承)。
public class Proxy{ void up(int i){ System.out.println(i); } void down(int i){ System.out.println(i); } } //使用继承 class ProExtend extends Proxy{ public static void main(String[] args){ ProExtend pe = new ProExtend(); pe.up(10); } } //使用代理 class ProDelegated{ private Proxy pr = new Proxy(); public void up(int i ){ pr.up(i); } public void down(int i){ pr.down(i); } public static void main(String[] args){ ProDelegated pd = new ProDelegated(); pd.up(10); } }
4 final关键字
通常它指的是“这是无法改变的。”不想做改变的可能出于两种原因:设计和效率。以下介绍了可能用到final的三种情况:数据、方法和类。
①final数据
一个永不改变的编译时常量一个在运行时被初始化的值,而你不希望它被改变。
对于编译期常量这种情况,在Java中,这类常量必须是基本数据类型,并且以关键字final表示。在对这个常量进行定义的时候,必须进行赋值。
在对对象引用使用final时,只能使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。然而,对象其自身却是可以修改的。
一个既是static又是final的域只占据一段不能改变的存储空间。
②final方法
使用final方法的原因有二:- 把方法锁定,以防任何继承类修改它的含义(使方法行为保持不变,并且不会被覆盖)。
- 过去建议使用fina方法的第二个原因是效率。(现在不再需要使用final方法来优化)
类中所有的private方法都隐式地指定为是final的。可以对private方法添加final修饰词,但这并不能给该方法增加任何额外的意义。
③final类
当将某个类的整体定义为final时(通过将final关键字置于它的定义之前),就表明了不允许任何人继承该类。换句话说,你对该类的设计不需要做任何变动,或者出于安全的考虑,你不希望它有子类。相关文章推荐
- java编程思想---第七章(复用类)
- 《Java 编程思想》--第七章:复用类
- JAVA编程思想学习总结:第七章——复用类
- Java编程思想_复用类
- Java编程思想-复用类总结
- java编程思想学习笔记 第七章 复用类
- java编程思想阅读笔记(二)访问权限控制和复用类
- Java编程思想:第7章 复用类
- Java编程思想之7复用类
- Java编程思想学习笔记(7)--复用类
- Java 编程思想(第四版)学习笔记(7)复用类
- java编程思想-07复用类
- 【Java编程思想笔记】第七章-复用
- java编程思想3感悟(5)---复用具体实现和复用接口
- Java编程思想学习(五) 复用类
- [Java编程思想]第7章 复用类
- java编程思想复用,多态,以及设计模式-多态
- 《Java 编程思想》-第7章 复用类 笔记
- Java编程思想复用类
- 【笔记】Java编程思想—一复用类