介面(interface),在軟體工程中,介面泛指供別人呼叫的方法或函數。它使抽象的概念更進一步。
在 Java 中透過關鍵字 interface 定義一個接口,透過關鍵字 implements 實作介面。
我們可以介面理解為是一個極度抽象的類,因為它比抽象類別更抽象。
下面透過範例來看介面的特性:
##定義一個接口
// 1.接口,访问权限只能是 默认(包访问权限)或 publicpublic interface Parent { // 2.成员变量,准确来说应该叫常量。具有以下特点: // 2.1.访问权限只能是 public (缺省也代表 public) ,修饰符只能是 final & static public final static String WORD = "a"; // 2.2.即使不指定,默认也是被 public fainl static 修饰 String NAME = "b"; // 2.3.不能存在空的 final 变量 ,如 int num; 但是可以被非常量表达式初始化 int num = new Random().nextInt(100); // 3.抽象方法,访问权限只能是 默认(包访问权限)或 public public abstract void print(); abstract void print(int i); // 4.普通方法,访问权限只能是 默认(包访问权限)或 public public void play(); void play(int i); }
實作一個介面
public class Son implements Parent { @Override public void print() { System.out.println("I am Son"); } @Override public void play() { System.out.println("Son is playing"); } }
public class Demo { // 内部接口 private interface A { void f(); } // 内部类 class AImpl implements A { @Override public void f() { System.out.println("AImpl.f()"); } } A getA(){ return new AImpl(); } private A a; public void receive(A a){ this.a = a; a.f(); } }
Demo demo = new Demo();// 错误,因为 A 是私有接口,不可被外部访问 // Demo.A a = demo.getA(); // 因为 A 接口不可视,所以只能通过内部类来访问 Demo.AImpl a = (Demo.AImpl) demo.getA();a.f();// 或者是这样 demo.receiveA(demo.getA());
public interface Demo { // 内部接口 interface A { void play(); } void print(); }public class DemoImpl implements Demo,Demo.A{ @Override public void play() { System.out.println("DemoImpl.play()"); } @Override public void print() { System.out.println("DemoImpl.print()"); } }public class Test{ public static void main(String[] args) { // 向上转型,只能调用 print() Demo demo = new DemoImpl(); // 向上转型,只能调用 play() Demo.A a = new DemoImpl(); } }
公共的靜態常數(public static final)。
一個抽象類,而一個類別卻可以實作多個介面。
#