接口(三):

一、接口不能用於建立實例,但接口能夠聲明引用類型變量,而且該引用類型變量必須引用到其實現類的對象。java

二、接口的主要用途:對象

  .2.一、定義變量,也可用於進行強制類型轉換blog

  .2.二、調用接口中定義的常量繼承

  .2.三、被其它類實現接口

三、一個類能夠實現多個接口,也是爲了彌補Java類單繼承靈活性的不足,而進行的補充,類實現接口的語法格式:隊列

[修飾符] class 類名 extends 父類 implements 接口1,接口2...{

  類體部分

}

 四、實現接口與繼承父類類似,同樣能夠得到所繼承接口裏的常量(成員變量)、方法(抽象方法、默認方法,不包括類方法),代碼以下:get

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();
	}
}

運行結果:編譯

 

五、一個類實現了一個或多個接口以後,這個類必須徹底實現這些接口裏的全部抽象方法,不然該類將保留從父接口裏繼承來的抽象方法,也就是說該類也必須是抽象類class

六、能夠把實現接口理解爲一種特殊的繼承,至關於實現類繼承了一個完全抽象的類,下面代碼爲實現接口的類:test

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());
	}
}

 運行效果:

注:

一、實現接口的方法時必須用 public 修飾,由於接口裏的方法都是 public 修飾的,而子類重寫父類的方法時,訪問權限只能是更大或相等,因此實現接口裏的方法時必須用 public 修飾

相關文章
相關標籤/搜索