接口(三):
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 修饰
热心技术,并兼吃喝,偶谈风月,不言国事.
浙公网安备 33010602011771号