点击进入我的博客

接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。

9.1抽象类和抽象方法

  • 抽象方法:这种方法是不完整的,仅有声明而没有方法。用abstract修饰的方法。
  • 抽象类:包含抽象方法的类叫做抽象类。如果一个类包含一个或多个抽象方法,该类必须被限定为抽象的。用abstract修饰的类。
  • 可以创建一个没有抽象方法的抽象类。
  • 创建抽象类和抽象方法非常有用,因为他们可以使累的抽象性明确起来,并告诉用户和编译器打算怎样来使用它们。抽象类还是很有用的重构工具,因为它们使得我们可以很容易地将公共方法沿着继承层次结构向上移动。

9.2 接口

  • interface关键字产生类一个完全抽象的类(接口),它根本没有任何具体实现。
  • 一个接口表示:所有实现了该特定接口的类看起来都像这样。
  • 接口用于建立类于类之间的协议。
  • 接口中的域:默认是publicstaticfinal的。
  • 接口中的方法只能是public的,而且默认就是public的。

9.3 完全解耦

  1. 复用代码的第一种方式是客户端程序员遵循该接口来编写它们自己的类。

策略设计模式

更详细的请看设计模式!!!

  • 根据所传递的参数对象的不同而具有不同行为的方法。
  • 这类方法包含所要执行的算法中固定不变的部分,而“策略”包含变化的部分。
  • 策略就是传递进去的参数对象。
public class Test {
    static void process(Processor p) {
        p.process();
    }

    public static void main(String[] args) {
        Test.process(new Processor1());
        Test.process(new Processor2());
    }
}

interface Processor {
    void process();
}

class Processor1 implements Processor {
    public void process() {
        System.out.println("1");
    }
}

class Processor2 implements Processor {
    public void process() {
        System.out.println("2");
    }
}

适配器设计模式

  • 你经常会无法修改你想使用的类,因为一般你是使用第三方的类库。
  • 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。

9.4 Java中的多重继承

  • Java最多只能继承一个类,但是可以实现多个接口
  • 一个类可以向上转型成任何一个接口。

使用接口的原因:

  1. 为了能够向上转型成为多个基类类型。
  2. 与抽象类相同,防止客户端程序员创建该类对象。

抽象类OR接口:

  1. 如果要创建不带任何方法定义和成员变量的基类,那么就应该选择接口而不是抽象类。
  2. 事实上,如果知道某事物应该成为一个基类,那么第一选择应该是使它成为一个接口。

9.5 通过继承来扩展接口

  • 接口可以继承其他接口
  • 接口可以一次性继承多个其他接口

9.5.1 组合接口时的名字冲突

  • 完全相同的方法不会有问题
interface I1 { void f();}
interface I2 { int f(int i);}
interface I3 { int f();}

class C {
    int f() {
        return 0;
    }
}
// 两个方法重载
class C2 implements I1, I2 {
    public void f() {

    }
    public int f(int i) {
        return 0;
    }
}
// 重载
class C3 extends C implements I2 {
    public int f(int i) {
        return 0;
    }
}
// 相同的方法没问题,同时重写两个方法
class C4 extends C implements I3 {
    public int f() {
        return 4;
    }
}
// 此时是有问题的
class C5 extends C implements I1 {
}

9.6 适配接口

接口最吸引人的原因之一就是允许同一个接口具有多个不同的具体实现。

9.7 接口中的域

  • 因为接口中的域是publicstaticfinal的,所以接口可以用来创建常量组(尽量避免这么做!)。

9.7.1 初始化接口中的域

  1. 在接口中定义的域不能是空final,但是可以被非常量表达式初始化。
  2. static代码块不能出现在接口中

9.8 嵌套接口

  • 接口可以嵌套在类或其他接口中。
  • 类内部的接口可以有四种权限控制符。
  • 接口内部的接口可以只能是public的。
  • 当实现某个接口时,不需要实现嵌套在其内部的任何接口。

9.9 接口与工厂

  • 接口是实现多重继承的途径,而生成遵循某个接口的对象的典型方法就是工厂方法
  • 这与直接调用构造器不同,我们在工厂对象上调用的是创建方法,而该工厂对象将生成接口的某个实现的对象。

9.10 总结

优先使用类而不是接口!


卢卡斯哔哔哔
46 声望6 粉丝