1. 程式人生 > >java 介面(interface)的應用詳解

java 介面(interface)的應用詳解

java 介面(interface)的應用詳解

1.java 介面(interface)

  1. 介面(interface)是與類並行的一個概念
  2. 介面的主要用途就是被實現類實現。(面向介面程式設計)

2.java 介面(interface)使用的知識點

  1. 介面可以看做是一個特殊的抽象類。是常量與抽象方法的一個集合,不能包含變數、一般的方法;
  2. 介面是沒有構造器的。
  3. 介面定義的就是一種功能,這個功能可以是被類所實現(implements)
    如:class CC extends DD implements A
  4. 實現介面的類,必須重寫其中的所有的抽象方法,方可例項化,若沒有重寫所有的抽象方法,則此類仍為抽象類
  5. 類可以實現多個介面。 -----java 中類的繼承是單繼承的
  6. 介面與介面之間也是繼承關係,而且可以實現多繼承性
    注:5,6描述的是java中的繼承的特點
  7. api中的Collection、Comparable就是一個介面
  8. 介面中的所有成員變數都預設是由public static final修飾的。
  9. 介面中的所有方法都預設是由public abstract修飾的
public class TestInterface {
	public static void main(String[] args) {
		System.out.println(A.I);//可以直接輸出
	}
}
interface A{
	//常量:所有的都是用public static final
//	可以省略前面的宣告 public static  final 
	int I = 1;
	public static final boolean FLAG = false;
	//抽象方法:所有的抽象方法都用public abastract修飾,可以省略
	public abstract void method1();
	void method2();
}
abstract class BB implements A{
}
class DD{
}
interface MM{	
}
class CC extends DD implements A,MM{

	public void method1() {	
	}
//	void method2() {
//	許可權不能小於介面定義的,所以只能定義為public
//	}
	public void method2() {	
	}
}
//介面之間仍為繼承關係!(而且可以多繼承)
interface JJ extends MM,A{
	void method4();
}

8.介面與具體的實現類之間也存在多型性

//介面與具體的實現類直接也存在多型性
public class TestInterface1 {
	public static void main(String[] args) {
		Duck d = new Duck();
		TestInterface1.test1(d);
		TestInterface1.test2(d);
		TestInterface1.test3(d);
	}
	public static void test1(Runner r) {//Runner r = new Duck();
		r.run();//虛擬方法呼叫
	}
	public static void test2(Swimmer s) {//Swimmer s = new Duck();
		s.swim();;
	}
	public static void test3(Flier f) {//Flier f = new Duck();
		f.fly();
	}
	
}
interface Runner{
	public abstract void run();
}
interface Swimmer{
	void swim();
}
interface Flier{
	void fly();
}
class Duck implements Runner,Swimmer,Flier{

	@Override
	public void fly() {
		System.out.println("醜小鴨也可以會變成白天鵝!");
	}

	@Override
	public void swim() {
	System.out.println("紅掌撥清波");
	}

	@Override
	public void run() {
		System.out.println("鴨子屁股扭扭的走路");
	}

}

3.介面使用總結

  1. 通過介面可以實現不相關的類的相同行為,而不需要考慮這些類之間的層次關係
  2. 通過介面可以指明多個類需要實現的方法,一般用於定義物件的擴張功能。
  3. 介面主要用來定義規範,接觸耦合關係。如:高通。

4.結果的應用和 實現介面的匿名類物件

//介面應用
public class TestUSB {
	/*輸出結果:
	 * 	U盤開始工作
		此裝置開始工作....
		U盤結束工作
		U盤開始工作
		此裝置開始工作....
		U盤結束工作
		手機開始工作
		此裝置開始工作....
		開機結束工作
	 */
	public static void main(String[] args) {
		Computer c = new Computer();
		c.doWork(new Flash());
		
		Flash f = new Flash();
		c.doWork(f);
		
		//實現介面的匿名類物件
		USB phone = new USB(){

			@Override
			public void start() {
				System.out.println("手機開始工作");
			}

			@Override
			public void stop() {
				System.out.println("開機結束工作");
			}
			
		};
		c.doWork(phone);
	}
}
//這裡為標準
interface USB{
	//USB尺寸的大小,可以設定為常量
	
	//功能設定為抽象
	void start();
	void stop();
}
class Computer{
	public void doWork(USB usb) {
		usb.start();
		System.out.println("此裝置開始工作....");
		usb.stop();
	}
}
class Printer implements USB{

	public void start() {
		System.out.println("印表機開始工作");
	}

	public void stop() {
		System.out.println("印表機結束工作");
	}
	
}
class Flash implements USB{

	public void start() {
		System.out.println("U盤開始工作");
	}

	public void stop() {
		System.out.println("U盤結束工作");
	}
	
}