接口(三):
1、接口不能用于创建实例,但接口可以声明引用类型变量,并且该引用类型变量必须引用到其实现类的对象。
2、接口的主要用途:
.2.1、定义变量,也可用于进行强制类型转换
.2.2、调用接口中定义的常量
.2.3、被其它类实现
3、一个类可以实现多个接口,也是为了弥补Java类单继承灵活性的不足,而进行的补充,类实现接口的语法格式:
[修饰符] class 类名 extends 父类 implements 接口1,接口2...{ 类体部分 }
4、实现接口与继承父类相似,一样可以获得所继承接口里的常量(成员变量)、方法(抽象方法、默认方法,不包括类方法),代码如下:
interface InterfaceA{ int a=1; void testA(); default void testB(){ System.out.println("接口InterfaceA中的默认方法testB()"); } static void testC(){ System.out.println("接口InterfaceA中的类方法testC()"); } } public class ImplementsTest implements InterfaceA{ public void testA(){ System.out.println("ImplementsTest类实现接口InterfaceA中的testA()方法"); } public void outSper(){ //-如下代码说明类实现接口,可以继承接口的默认方法 testB(); } public static void outStaticSper(){ //-如下代码编译报错,提示找不到方法testC(),说明类实现接口不会继承接口的类方法 //testC(); //-要调用接口的类方法,必须通过接口来调用 InterfaceA.testC(); } public static void main(String[] args){ System.out.println(new ImplementsTest().a); new ImplementsTest().testA(); new ImplementsTest().outSper(); outStaticSper(); } }
运行结果:
5、一个类实现了一个或多个接口之后,这个类必须完全实现这些接口里的所有抽象方法,否则该类将保留从父接口里继承来的抽象方法,也就是说该类也必须是抽象类
6、可以把实现接口理解为一种特殊的继承,相当于实现类继承了一个彻底抽象的类,下面代码为实现接口的类:
import static java.lang.System.*; interface Product{ int getProduceTime(); } interface OutPut{ int MAX_CACHE_LINE=50; void out(); void getData(String mes); default void print(String...mesg){ for(String str:mesg){ out.println(str); } } default void test(){ out.println("接口OutPut的默认方法test()!"); } static String staticTest(){ return "接口OutPut的类方法staticTest()!"; } } public class Printer implements Product,OutPut{ private String[] printData = new String[MAX_CACHE_LINE]; private int dataNum=0; public int getProduceTime(){ return 45; } public void out(){ while(dataNum>0){ out.println("打印机打印:"+printData[0]); arraycopy(printData,1,printData,0,--dataNum); } } public void getData(String mes){ if(dataNum>=MAX_CACHE_LINE){ out.println("输出队列已满,添加失败!"); }else{ printData[dataNum++]=mes; } } public static void main(String[] args){ Printer p = new Printer(); p.getData("我的!"); p.getData("你的!"); p.out(); p.getData("他的!"); p.getData("大家的!"); p.out(); p.print("我的","你的","他的","大家的"); p.test(); out.println(p.getProduceTime()); //-父接口的静态方法,只能通过父接口来调用 out.println(OutPut.staticTest()); } }
运行效果:
注:
1、实现接口的方法时必须用 public 修饰,因为接口里的方法都是 public 修饰的,而子类重写父类的方法时,访问权限只能是更大或相等,所以实现接口里的方法时必须用 public 修饰
热心技术,并兼吃喝,偶谈风月,不言国事.