接口Interface

接口的语法(一)

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老师。

原文地址:https://www.cnblogs.com/larrylawrence/p/3397526.html