/**
* 标题:Java接口的定义与使用
* 作者: Nstar
* 时间:2020年3月11日
* 内容:
* 问:什么是接口?怎么定义和使用?
* 答:1.接口属于Java的引用数据类型,我们可以将其理解为特殊的抽象类
* 2.接口可以有一个默认方法(default关键字修饰方法)并且允许有方法体(具体方法实现)
* 3.接口可以有一个静态方法(static关键字修饰方法)并且允许有方法体(具体方法实现)
* 4.接口可以继承一个接口,或者多个接口,语法基本和类继承一样,使用extends关键字实现
* 5.接口的类和方法必须全抽象,默认方法和静态方法除外
* 6.如果想使用某个接口,可以使用子类加上implements关键字加上接口名实现
*/
interface A{ //定义接口A,作为C接口的父接口
default void spek(){ //接口A的默认方法
System.out.println("A接口的默认方法");
}
static void run(){ //接口A静态方法
System.out.println("A接口的静态方法");
}
abstract class Test_class{ //接口A的抽象类
abstract void spek1(); //接口A的抽象方法
}
}
interface B{ //定义接口B,也将其作为C接口的父接口
default void spek_b(){ //老套路,接口默认方法,Java规定可以有方法体
System.out.println("B接口的默认方法");
}
static void run_b(){ //老套路,接口静态方法,Java规定可以有方法体
System.out.println("B接口的静态方法");
}
abstract class Test_class_b{ //B接口的抽象方法
abstract void spek_b1();
}
interface C extends A,B{ //定义C接口,并且将继承于A和B接口,这个会将他们的所有默认方法和静态方法都继承到C接口
//不在子接口重写父接口的抽象方法,我们把此操作放在Test_spek类进行实现重写
}
class Test_spek implements C{ //通过关键名字implements实现接口C
void spek1(){ //重写接口A的抽象方法
System.out.println("接口A抽象方法!!!");
}
void spek_b1(){ //重写接口B的抽象方法
System.out.println("接口B抽象方法!!!");
}
}
}
public class Intface_Test1{ //测试类
public static void main(String[] args){ //入口方法
A.run(); //类名调用静态方法
B.run_b(); //类名调用静态方法
B.Test_spek ts=new B.Test_spek();
ts.spek(); //实例调用接口默认方法
ts.spek_b(); //实例调用接口默认方法
ts.spek1(); //实例调用接口重写后的抽象方法
ts.spek_b1(); //实例调用接口重写后的抽象方法
}
}