复用代码是Java众多引人注目的功能之一。但仅仅能复制代码并对之加以改变是不够的,还须要作更多的事情。html
复用代码的两种形式:ide
1.组合,新类中产生现有类对象post
2.继承,用现有类型建立新类型url
7.1组合语法spa
7.2继承语法代理
7.2.1初始化基类htm
当建立了一个导出类的对象时,该对象包含了一个基类的子对象。这个子对象与你用基类直接建立的对象是同样的(Java会自动在导出类构造器里插入对基类构造器的调用,基类只含带参构造须要本身用super调用,不可省略),两者区别在于继承时基类的子对象包装在导出类对象内部,而直接建立来与外部。对象
7.3代理blog
代理:第三种关系,Java没有对它的直接支持,继承和组合之间中庸之道。继承
实现代理:把一个成员对象放在代理类中(就像组合),同时在新类中暴露了这个对象的全部方法(就像继承)。
7.4结合使用组合和继承
7.4.1确保正确清理
除了内存以外,不能依赖垃圾回收器去作任何事。若是须要清理,最好是编写本身的清理方法(子类清理方法和父类清理方法调用顺序按照建立反序来执行),在该对象使用结束以后,用finally{}子句调用清理方法,不要使用finalize()。
7.4.2名称屏蔽
子类能够对基类方法进行覆盖,重载。利用@override注解能够防止在想覆盖时意外写成了重载
7.5在组合与基础之间选择
继承:is-a
组合:has-a
7.6protected关键字
提供子类和同包的访问权限
7.7向上转型
为新类型提供方法,并非继承技术中最重要的方面,最重要的是新类和基类之间的关系,这种关系能够用”新类是现有类的一种类型“来表示。
7.7.1为何称为向上转型
7.7.2再论如何选择组合与继承
问一问本身是否须要重新类向基类转型,须要用继承,不然尽量不要用
7.8final关键字
7.9初始化及类的加载
Java中类的加载在初次使用时发生,一般是建立对象或者访问static方法(构造器也算是static方法,只是隐式的)。
7.9.1继承与初始化
7.10总结
组合和继承均可以产生新类型。组合通常是把现有类型做为新类型实现的一部分加以复用,而继承是复用已有类型的接口。