JAVA_基礎面向對象:接口

接口(interface)

接口的使用java

1)接口使用interface來定義。ide

2)在java中,接口和類是並列的兩個結構。code

3)如何定義接口:定義接口中的成員。對象

JDK7及之前:只能定義全局常量和抽象方法。繼承

  • 全局常量:public static final(可省略)
  • 抽象方法:public abstract (可省略)

JDK8:除了定義全局常量和抽象方法以外,還能夠定義靜態方法、默認方法。接口

  • 接口中定義的靜態方法,只能經過接口來調用。
  • 經過實現類的對象,能夠調用接口中的默認方法。
  • 若是實現類重寫了接口中的默認方法,調用時,則是重寫後之後的方法。
  • 若是子類(或實現類)繼承的父類和實現的接口中聲明瞭同名同參的方法,那麼子類在沒有重寫此方法的狀況下,默認調用父類中的同名同參的方法。(類的優先原則)
  • 若是實現類實現了多個接口,而多個接口定義了同名同參的默認方法,那麼在實現類沒有重寫此方法的狀況下,報錯。
    →接口衝突(這就須要咱們必須在實現類中重寫此方法)
  • 如何在子類(或實現類)的方法中調用父類、接口中被重寫的方法。
//		調用接口中默認的方法
		CompareA.super.method3();
		CompareB.super.method3();

4)接口中不能定義構造器,意味着接口不能夠實例化。開發

5)java開發中,接口經過讓類去實現(implements)的方式來使用。
若是實現類覆蓋了接口的抽象方法,則此實現類就能夠實例化。
若是實現類沒有覆蓋接口的抽象方法,則此實現類還是一個抽象類。flash

6)java類能夠實現多個接口 → 彌補了java單繼承的侷限性。
格式class AAextends BB implements CC,DD,EEit

public class InterfaceTest {
	public static void main(String[] args) {
		System.out.println(Flyable.MAX_SPEED);//7900
		System.out.println(Flyable.MIN_SPEED);//1
		Plane plane = new Plane();
		plane.fly();//經過引擎起飛
	}
}
interface Flyable{
	//全局常量
	public static final int MAX_SPEED = 7900;//未省略
	int MIN_SPEED = 1;//省略
	//抽象方法
	public abstract void fly();//未省略
	void stop();//省略
}
interface Attackable{
	void attack();
}
class Plane implements Flyable{
	@Override
	public void fly() {
		System.out.println("經過引擎起飛");
	}
	@Override
	public void stop() {
		System.out.println("駕駛員減小起飛");
	}
}
abstract class Kite implements Flyable{
	@Override
	public void fly() {}
}
class Bullet extends Object implements Flyable,Attackable{
	@Override
	public void attack() {}
	@Override
	public void fly() {}
	@Override
	public void stop() {}
}

7)接口與接口之間能夠繼承,並且能夠多繼承。class

interface AA {
	void method1();
}
interface BB {
	void method2();
}
interface CC extends AA,BB {}

8)接口的具體使用,體現多態性。

9)接口能夠看作是一種規範。

public class USBTest {
	public static void main(String[] args) {
		Computer computer = new Computer();

//		建立了接口的非匿名實現類的非匿名名對象
		Flash flash = new Flash();
		computer.transferData(flash);
		System.out.println("************************");
		
//		建立了接口的非匿名實現類的匿名名對象
		computer.transferData(new Printer());
		System.out.println("************************");
		
//		建立了接口的匿名實現類的非匿名名對象
		USB phone = new USB() {
			@Override
			public void start() {
				System.out.println("手機開始工做");
			}
			@Override
			public void stop() {
				System.out.println("手機結束工做");
			}
		};
		computer.transferData(phone);
		System.out.println("************************");
		
//		建立了接口的匿名實現類的匿名名對象
		computer.transferData(new USB() {
			@Override
			public void start() {
				System.out.println("MP3開始工做");
			}
			@Override
			public void stop() {
				System.out.println("MP3結束工做");
			}
		});
	}
}
class Computer {
	public void transferData(USB usb) {
		usb.start();
		System.out.println("具體傳輸數據的細節");
		usb.stop();
	}
}

interface USB {
	public abstract void start();

	void stop();
}

class Flash implements USB{

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

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

class Printer implements USB {

	@Override
	public void start() {
		System.out.println("打印機開始工做");
	}

	@Override
	public void stop() {
		System.out.println("打印機開始工做");		
	}
	
}
相關文章
相關標籤/搜索