Java基础

Java编程思想笔记9.接口

2018-11-09  本文已影响0人  卢卡斯哔哔哔

点击进入我的博客

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

9.1抽象类和抽象方法

9.2 接口

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中的多重继承

使用接口的原因:

  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 接口中的域

9.7.1 初始化接口中的域

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

9.8 嵌套接口

9.9 接口与工厂

9.10 总结

优先使用类而不是接口!

上一篇下一篇

猜你喜欢

热点阅读