这章内容有点多,先上图。。
复用类的三种方式:
- 组合
- 继承
- 代理
代理以前没有用过,有点类似组合,将原有的类置于新类中,同时会在新类中使用原有类的方法来实现新类的方法,代码如下:
class A{
void a(){}
void b(){}
}
public class Test {
A ac=new A();
void a(){
ac.a();
}
void b(){
ac.b();
}
public static void main(String[] args){
Test t=new Test();
t.a();
t.b();
}
}
关于类的初始化的顺序
- 基类的静态变量
- 导出类的静态变量
- 基类的普通变量
- 基类的构造器
- 导出类的普通变量
- 导出类的构造器
静态变量的初始化时在类加载时进行初始化的,一开始加载的是基类,然后加载导出类,所以基类和导出类的静态变量的初始化在最开始。
下面的程序验证了类的初始化顺序:
class A{
static int a=getA();
int b=getA2();
A(){
System.out.println("Superclass constructor");
}
static int getA(){
System.out.println("Superclass static value initlized");
return 0;
}
int getA2(){
System.out.println("Superclass ordinarily value initlized");
return 0;
}
}
public class Test extends A{
static int c=getC();
int d=getD();
static int getC(){
System.out.println("Subclass staic value initlized");
return 0;
}
int getD(){
System.out.println("Subclass ordinarily value initlized");
return 0;
}
Test(){
System.out.println("Subclass constructor");
}
public static void main(String[] args){
new Test();
}
}
程序的运行结果如下:
先说这么多。。。