接口的使用: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,EE
it
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("打印機開始工做"); } }