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 表达式是一个可传递的代码块, 可以在以后执行一次或多次