目录
1.接口是什么
是使用interface定义的接口,接口只有局部变量和抽象方法(JDK8之前)
JDK8扩展了default方法。
子类通过implements实现接口
而接口的命名以L开头和类做区分,子类实现接口可以使用impl结尾,表示接口的子类。
2.接口的使用规则
2.1接口中只有public权限,接口中只有全局变量和抽象方法,只有在接口中abstract、static、final、public都可以省略掉。(在阿里编码中,定义接口尽量简洁,上面的关键字都不要写)
2.2接口的多实现,接口可以同时实现多个父接口;如上,在实现多个父接口时,用逗号分隔。
接口中可以使用extends来实现多个父接口。
(那么问题来了,子类必须实现父接口中的所有抽象方法吗?)
答案是:不是,上述的前提是子类是普通类,若子类是抽象类,就不需要全部都实现
2.3接口不能直接实例化对象,必须通过子接口向上转型。
上面是俩个接口IMessage、INews。
下面的MessageImps实现了俩个接口
所以可以看出要想使用getNews,要用父接口之间的相互转换。
而在这里有一个重要的点:
父类/父接口 父引用 =new 子类实例();
到底能调用啥方法要看前面的父类/父接口中定义了啥方法,
调用的方法长啥样子,要看new的是哪个子类。
2.4子类若同时继承父类,实现接口。
解决方法:先试用extends继承一个父类,而后使用implements实现接口。
public class DTest extends D implements A,B{
}
子类实现接口没有is-a原则,这个原则只是类之间的继承。
3.接口的应用场景
3.1定义规范/标准(USB接口,5G接口)
为什么这里的参数是USB port1、USB port2?而不是Mouse、Keyboard?
为了方便我们插入其他设备也可以,而不是只让鼠标和键盘使用。也可以插入U盘、手机等。
3.2表示一种具备的能力或者行为。
4.JDK内置的两大接口
4.1java.long.Comparable
Comparable具备可比较的能力
public int comparaTo(T O)
=0,说明当前对象等于目标对象O
>0,说明当前对象大于目标对象O
<0,说明当前对象小于目标对象O
4.2java.long.Cloneable(用于克隆接口)
克隆一个新的对象,新的对象的属性值是从旧对象中拷贝过来的(这里涉及深浅拷贝,后续会提到)
package interface_test;
//这时A类也具备了克隆能力
class A implements java.lang.Cloneable {
int num;
@Override
protected A clone() throws CloneNotSupportedException{
return (A) super.clone();
}
}
public class B implements java.lang.Cloneable {
private static B newB;
A a =new A();
@Override
protected B clone() throws CloneNotSupportedException {
B.newB =(B) super.clone();
newB.a=a.clone();//也是通过克隆来的
return newB;
}
public static void main(String[] args) throws CloneNotSupportedException {
B b1=new B();
B b2=b1.clone();
System.out.println(b1==b2);
System.out.println(b1.a.num);//0
b1.a.num=100;
System.out.println(b2.a.num);//0
}
}
package interface_test;
public class Cloneable { //克隆类只要这样写就可以
}