类的复用(组合与继承)
第一种方法:只需在新类中产生现有类的对象,新类由现有类组成,也称为组合,该方法只是复用了现有程序代码的功能;
第二种方法:按现有类来创建新类,无需改变现有类,在现有类基础上添加新代码,这种方式称为继承,编译器完成大部分工作。
1、组合语法
初始化引用对象可以在以下位置进行:
a) 在定义对象的地方,意味着它们总能在构造器被调用之前初始化;
b) 在类的构造器中;
c) 就在要使用这些对象之前,这种方式为惰性初始化,没必要在生成对象时就进行初始化,这样可以减少负担;
d) 使用实例初始化。
2、继承语法
继承是所有OOP语言不可缺少的部分,当创建一个类时,总是在继承,除非已明确要从其他类中继承,否则都是隐式地从Java的标准根类Object进行继承,所以所有类都具有Object类的对象与方法。
3组合与继承的关系以及应用场景
组合:通常用于你想要的在新类中使用现有类的功能而非它的接口的情形。即,你在新类中嵌入某个对象,借其实现你所需要的功能,但新类的用户看到的只是你为新类所定义的接口,而非嵌入对象的接口。为取得此效果,你需要在新类中嵌入一个private的现有类的对象。
继承:创建一个基类,子类对父类进行继承。
Java中"is-a"(是一个)的关系是用继承来表达的,而“has-a”(有一个)的关系则是用组合来表达的。
判断你到底是该用组合还是继承的最清晰的方法,就是问一看一下自己是否需要从新类向基类向上转型,如果你必须向上转型,那么继承是必要的,但如果你不需要,则应当考虑一下是否需要继承。
在继承图中是向上移动的,因此称为向上转型,向上转型是由专用通用类向基类转型的,所以比较安全。
4程序初始化以及类加载
Static的用法
类中的静态代码块被自动执行,尽管类有多个实例对象,但其中的静态代码块只被执行了一次。当一个程序中用到了其他的类,类是在第一次被使用的时候才被装载,而不是在程序启动时就装载程序中所有可能要用到的类。