当一个抽象类中的方法都是抽象的时候,这时可以将该抽象类用另一种形式定义和表示,就是接口 interface。
定义接口使用的关键字不是class,是interface.
接口中常见的成员:
这些成员都有固定的修饰符。(*由于修饰符是固定的,为了代码简洁,定义接口的时候不用写修饰符*)
1,全局常量::public static final
2,抽象方法:public abstract
由此得出结论,接口中的成员都是公共的权限。
例1:
1 interface Demo 2 { 3 public static final int NUM = 4; 4 5 public abstract void show1(); 6 public abstract void show2(); 7 } 8 //类与类之间是继承关系,类与接口之间是实现关系。 9 /* 10 接口不可以实例化。 11 12 只能由实现了接口的子类并覆盖了接口中*所有的抽象方法后*,该子类才可以实例化。 13 否则,这个子类就是一个抽象类。 14 15 */ 16 17 18 class DemoImpl implements /*实现*/Demo 19 { 20 public void show1() 21 {} 22 23 public void show2() 24 { 25 26 } 27 } 30 /* 31 在java中不直接支持多继承,因为会出现调用的不确定性。***原因:继承的类方法中有方法体,而接口的方法中没有方法体。*** 32 所以java将多继承机制进行改良,在java中变成了多实现。 33 34 一个类可以实现多个接口。 35 36 */ 37 38 interface A 39 { 40 public void show(); 41 } 42 43 interface Z 44 { 45 public int add(int a,int b); //不用考虑怎么实现,由子类来完成。 46 } 47 51 class Test implements A,Z//多实现 52 { 53 54 public int add(int a,int b) 55 { 56 return a+b; 57 } 58 public void show(){} 59 60 }
1 /* 2 一个类在继承另一个类的同时,还可以实现多个接口。 3 */ 4 class Q 5 { 6 public void method() 7 {} 8 } 9 10 abstract class Test2 extends Q implements A,Z //Test2属于Q的体系,同时扩展了A,Z的功能。 11 { 12 13 } 14 /* 15 接口的出现避免了单继承的局限性。 16 17 */
例2:用的不多
1 interface CC 2 { 3 void show(); 4 } 5 interface MM 6 { 7 void method(); 8 } 9 10 interface QQ extends CC,MM//接口与接口之间是继承关系,而且接口可以多继承。【不存在方法体】 11 { 12 void function(); 13 } 14 15 class WW implements QQ 16 { 17 //覆盖3个方法。 18 public void show(){} 19 public void method(){} 20 public void function(){} 21 }
例3,一个小例子体现接口思想
笔记本电脑使用。
为了扩展笔记本的功能,但日后出现什么功能设备不知道。
定义一个规则,只要日后出现的设备都符合这个规则就可以了。
规则在java中就是接口。
1 interface USB// 1.暴露的规则。 2 { 3 public void open(); 4 public void close(); 5 } 6 7 8 class BookPC 9 { 10 public static void main(String[] args) 11 { 12 useUSB(new UPan());//2.功能扩展了。 13 useUSB(new UsbMouse()); 14 } 15 16 //使用规则。 17 public static void useUSB(USB u)//接口类型的引用,用于接收(指向)接口的子类对象。//USB u= new UPan(); 18 { 19 if(u!=null) 20 { 21 u.open(); 22 u.close(); 23 } 24 } 25 } 26 //一年后。------------------------------ 27 //实现规则。 28 29 //3.这些设备和电脑的耦合性降低了。 30 31 class UPan implements USB 32 { 33 public void open() 34 { 35 System.out.println("upan open"); 36 } 37 public void close() 38 { 39 System.out.println("upan close"); 40 } 41 42 } 43 44 45 class UsbMouse implements USB 46 { 47 public void open() 48 { 49 System.out.println("UsbMouse open"); 50 } 51 public void close() 52 { 53 System.out.println("UsbMouse close"); 54 } 55 56 }