9.1 接口 ,lambda表达式 ,内部类

85 阅读2分钟

1 接口

1.1 什么是接口技术

这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。
一个类可以实现(implement) 一个或多个接口,并在需要接口的地方,随时使用实现了相应接口的对象。

1.2 接口的定义

在 Java 程序设计语言中, 接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。
示例: 例如如果使用Arrays.sort()方法排序 就需要实现接口Comparable(可比的) 关键字:implements

public interface Comparable{ int compareTo(T other); }

当调用x.compareTo( y )的时候 如果x>y 返回负数, x=y返回0

实现compareTo时 需要满足对称性x.y = -y.x

在父[ ] a= {父,子父 } ; 时 ,使用的时候可能会出问题

可以在父类中声明另一个 rank方法 ,每个类都有不同的rank值 ,并 final compareTo,定义通用的比较 并禁止子类修改,子类 重写 rank方法,执行父类compareTo时,会先调用子类rank,然后在调用compareTo通用逻辑,并根据子类rank计算完的值进行比较

1.3 接口的特性

接口不是类,尤其不能使用 new 运算符实例化一个接口,能声明接口的变量

x = new Comparable(. . .); // ERROR
Comparable x; // OK

接口可以用instanceof检查一个对象是否属于某个特定接口

interface ITest {
    void prt();
}

public class Test1 implements ITest{
    @Override
    public void prt() {
        System.out.println(1);
    }

    public static void main(String[] args) {
        System.out.println(new Test1() instanceof ITest);//true
    }
}

接口可以继承别的接口,方便整合不同功能interface2不用实现interface1的方法,

public interface interface2 extends interface1 {
}

但是如果某个类实现了interface1 ,那么要实现interface1,2 的所有方法
例如: Cloneable(对象拷贝) Comparable(比较) Test需要拥有拷贝和比较两个功能

public class Test implements Cloneable,Comparable {

}

接口中所用变量 public static final

1.4 接口和抽象类

为什么有抽象类还要 使用接口?

类只能单继承,不便于扩展

1.5 接口的默认方法

在方法上加上default

public interface Comparable{ 
    default int compareTo(T other) { return 0; }// B y default, all elements are the same }

如果两个接口都实现了某个方法 子类必须指定调用哪个接口的默认方法

class Student implements Person, Named{ //指定实现 
    public String getName () { return Person.super.getName(); } 
}

1.6 解决默认方法的冲突

方法冲突 超类>接口

1.7 接口与回调

2 lambda表达式

lambda 表达式是一个可传递的代码块, 可以在以后执行一次或多次