一.认识接口
写法:
public interface A {
//成员变量(常量)
String SCHOOL-NAME-="bbbb";
//成员方法(抽象方法)
void a();
}
使用:
A.Java(接口)
public interface A {
//成员方法(抽象方法)
void a();
}
B.Java
public class B implements A {
@Override
public void a(){
}
}
二.接口的好处
1.弥补了类单继承的不足,一个类同时可以实现多个接口
2.让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现
class B {
public void bbb(){
}
}
class C extends B implements A,D{
public void bbb(){
}
@Override
public void aaa(){
}
@Override
public void ddd(){
}
}
interface A{
void aaa();
}
interface D{
void ddd();
}
三.接口新增方法
默认方法:使用default修饰,使用实现类的对象调用
静态方法:static修饰,必须用当前接口名调用
私有方法:private修饰,jdk9才开始有,只能在接口内部被调用
它们都默认被public修饰
public interface User {
//1.默认方法(实例方法):使用default修饰,默认会被加上public修饰
//注意:只能使用接口的实现类对象调用
default void text1(){
}
//2.私有方法:必须用private修饰,只能在同类中被调用
private void text4(){
}
//3.类方法(静态方法):使用static修饰,默认会被加上public修饰
//注意:只能使用接口的实现类对象调用
static void text3(){
}
}
目的:增强了接口的能力,更便于项目的扩展和维护
四.接口的多继承(一个接口可以同时继承多个接口,便于实现类去实现)
interface AA{void text1();}
interface BB{void text2();}
interface CC{}
interface DD extends AA,BB,CC{}
class EE implements DD{
@Override
public void text1() {
}
@Override
public void text2() {
}
}
五.接口的其他注意事项
1.一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现
interface A{ void text1(); }
interface B{ String text2(); }
interface C extends A,B { } //报错
2.一个类实现多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现
interface A{ void text1(); }
interface B{ String text2(); }
class C implements A,B { } //报错
3.一个类继承了父类,又同时实现了接口,父类中和接口中有同名的默认方法,实现类会优先用父类
public class Text2 {
public static void main(String[] args) {
zi z=new zi();
z.run();
}
}
class fu{
public void run(){
System.out.println("父类的run方法执行了");
}
}
interface it{
default void run(){
System.out.println("it的run方法执行了");
}
}
class zi extends fu implements it{ //父类的run方法执行了
}
4.一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可(即用自己写出来的方法)