目的:使用类而不破坏现有程序代码。设计模式
方法:安全
1.组合(在新类中产生现有类的对象,经常使用),其较为普通的意思是在新类中建立某一个类的对象,而后使用其方法.net
2.继承(继承某个类,不经常使用)设计
以上两种方法都能从现有类型生成新类型代理
继承对象
1.初始化基类继承
因为如今涉及基类和导出类这两个类,而不是只有一个类,因此要试着想象处处类所产生的结果对象,会有点困惑。从外部来看,它就像是一个与基类具备相同接口的新类,或许还会有一些额外的方法和域。但继承并不仅是复制基类的接口。当建立了一个导出类的对象的时,对象包含了一个基类的子对象。这个子对象与你用基类直接建立的对象是同样的。两者的区别在于,后者来自于外部,而基类的子对象被包装在导出类对象内部。接口
以上的话摘自于Think in Java,实际上描述的意思如如下代码所示开发
public class A{get
}
class B extend A{
}
其中 A a = new A(),a为基类直接建立的对象,B b = new B(),B 为导出类的对象。简单的理解能够说父类是基类,子类是导出类。
能够发现基类是“向外”扩散的,因此基类在导出类构造器能够访问它以前,就已经完成初始化了。即便你不为B()建立构造器,编译器也会为你合成一个默认的构造器,该构造器将调用基类的构造器。
代理
参考文章设计模式之代理模式
向上转型
如图所示,即是向上转型的一个过程,A a = new B();这种将B引用转换为A引用的操做,称之为向上转型。
为何成为向上转型
历史缘由:以传统的类继承图的绘制方法为基础的:将根置于页面的顶端,而后逐渐向下。
由导出类转型成基类,在继承图上是向上移动的,所以通常称为向上转型。因为向上转型是从一个较专用类型将较通用类型转换,因此老是很安全的。在向上转型的过程当中,类接口中惟一可能发生的事情是丢失方法,而不是获取它们。
结尾,再次分析组合与继承
在面向对象过程当中,生成和使用程序代码最有可能采用的方法是直接将数据和方法包装进一个类中,并使用该类的对象。也能够运用组合技术使用现有的类来开发新的类;而继承技术实际上是不太经常使用的。所以应当慎用继承,一个最清晰的判断方法就是问一问本身是否须要重新类向基类向上转型。若是必须向上转型,则继承是必要的;