首页 > 技术文章 > 接口(三):

baby-zhude 2017-12-31 18:53 原文

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 修饰

推荐阅读