作为一门面向对象开发的语言,代码复用是java引人注意的功能之一。java代码的复用有继承,组合以及代理三种具体的表现形式,下面一一道来。
第一种方式是通过按照现有的类的类型创建新类的方式实现代码的复用,这种方式称之为继承。当我们创建一个新类时,总是继承这样或者那样的父类,隐式的父类是Object类。
public class A {
int a;
public A(int a) {
this.a=a;
System.out.println("------construct a------");
}
public void display(){
System.out.println(a);
}
}
public class B extends A {
int b;
public B(int b) {
super(b);
System.out.println("------construct b------");
}
}
public class C extends B {
int c;
public C(int c) {
super(c);
System.out.println("------construct c------");
}
public static void main(String[] args) {
new C(9).display();
}
}
第二种方式是组合,通过在新类中创建已存在的类的对象的方式来实现,这种方式很常见,代码如下
public class A {
int a;
public A(int a) {
this.a=a;
System.out.println("------construct a------");
}
public int getA(){
return a;
}
}
public class B{
private int b;
private A a=new A(2);
public B(int b) {
this.b=b;
System.out.println("------constructor b------");
}
public void show(){
b=b+a.getA();
System.out.println("------total:"+b);
}
public static void main(String[] args) {
new B(2).show();
}
}
第三种方式是代理,通过将类里面详细的实现方式封装起来,只提供类的方法的子集部分,代码如下
public class A {
public A() {
System.out.println("------construct a------");
}
public void method01(){
System.out.println("------method01------");
}
public void method02(){
System.out.println("------method02------");
}
public void method03(){
System.out.println("------method03------");
}
}
public class B{
private A a=new A();
public B() {
System.out.println("------constructor b------");
}
public void method01(){
a.method01();
}
}
总结:继承是通过关键字extends来实现的,在继承过程中,通过继承,子类可以获得父类的所有属性和方法;组合是将另一个对象的引用引入新类,在新类中可以直接使用引入类的共有方法;代理和组合很相似,但是他们表达的意思不一样,组合引入新类的主要是方便使用引入类的某些方法和属性,而代理主要是想隐藏部分引入类的方法或者是属性,通过代理类来达到这样的目的。