接口的语法(一)
1.使用interface定义;
2.可以理解为一个比较纯粹的抽象类,因为接口中的方法都是抽象方法(无需用abstract,默认就是抽象方法);
3.接口中所有方法的权限都是public。
USB.java
interface USB { public void read();//抽象方法的定义,没有函数体;写不写public无所谓,默认public void write(); }
USBPhone.java
接口的实现类负责来实现接口的抽象方法。实现是一种特殊的继承。实现也可以得到接口里的成员变量成员方法。
class Phone implements USB { public void read() { System.out.println("Phone read"); } public void write() { System.out.println("Phone write"): } }
Test.java
实现是特殊的继承,所以USBPhone是子类,USB是父类,向上转型依然成立。
class Test { public static void main(String args[]) { Phone phone = new Phone(); USB usb = phone ;//向上转型 usb.read();//此时调用的是子类usbphone覆写过的read方法,具体见 对象的转型 usb.write(); } }
编译运行Test后,打印出的是:
Phone read
Phone write
这是接口最基本的语法。
接口的语法(二)
1.实现接口使用implements关键字;
2.一个类可以实现多个接口(实现是特殊的继承,也就是一个类可以继承多个接口,JAVA中类只支持单继承,也就是一个类只能有一个父类);
3.一个接口可以继承多个接口。
对于2:
新建接口Wifi.java
interface Wifi { public void open(); public void close(); }
这时候把之前的Phone类修改一下,既支持USB又支持Wifi:
class Phone implements USB,Wifi { public void read() { System.out.println("Phone read"); } public void write() { System.out.println("Phone write"): } //同样,要覆写Wifi中的open和close方法 public void open() { System.out.println(open); } public void close() { Syetem.out.println(close); } }
这个时候Test.java中向上转型可以有两种选择:
class Test { public static void main(String args[]) { Phone phone = new Phone(); USB usb = phone ;//向上转型 usb.read();//此时调用的是子类usbphone覆写过的read方法,具体见 对象的转型 usb.write(); Wifi wifi = phone;//此时既可以向上转型为USB,又可以向上转型为Wifi wifi.open(); wifi.close(); } }
这时的Test打印:
Phone read
Phone write
open
close
对于3.一个接口可以继承多个接口:
新建A.java B.java C.java
A.java中:
interface A { public void funA(); }
B.java中:
interface B { public void funB(); }
C.java中:
interface C extends A,B//注意这里是extends而不是implments,要“实现”A和B就必须去覆写A和B中的抽象方法,这样一来C就不可能是接口,因为接口里都是抽象方法(不能有函数体) { public void fucC(); }
此时C里有三个方法。当要用一个类来实现C,必须覆写三个方法。这就是一个接口可以继承多个接口的含义。
(end)
注:这篇随笔是在看Mars老师的Java4Android的视频的时候做的笔记,如果存在版权那么归于Mars老师。其他一些笔记的内容也有部分是出自Mars老师的视频,就不一一声明了。在这里谢谢Mars老师。