Java——接口的定义与使用

接口

我们生活中经常听到usb接口,也知道电脑上有usb接口,那么接口是什么?

在我理解就是usb接口定义了一种标准或者说是规范,只有符合此标准的设备都可以使用usb接口。比如鼠标、键盘、打印机,我们不需要在电脑上开3个插槽来接这3个设备,只需要一个usb接口就能搞定。

在Java中,接口有点像抽象类,但是也有不同。抽象类强调的是一种 is a 的关系,比如学生是人类、工人是人类等等。而接口又有不同,接口更像是一种like a的关系,鼠标、键盘、打印机可以通过usb接口联系到一起。

接口的定义(jdk8以前):抽象方法与全局常量的集合(纯粹版的抽象类),Java中使用interface关键字来定义接口

//一个简单的接口
interface IMyInterface{
    public static final String msg = "test";
    public abstract void print();
}

接口的作用

1.定义操作标准

2.表示能力

3.分布式开发之中,暴露远程服务方法

接口优先原则:在一个操作既可以使用抽象类又可以使用接口的时候,优先使用接口。

接口命名:接口使用I开头

注意:

  • 子类要想使用接口,使用implements实现接口,一个子类可以同时实现多个父接口(避免了Java中单继承局限)
  • interface IMyInterface{
        String msg = "test";
        void print();
    }
    interface IMyInterface_Second{
        String msg2 = "test2";
        void print2();
    }
    //一个子类可以实现多个接口,也要重写多个接口的所有抽象方法
    class  MyInterfaceImpl implements IMyInterface,IMyInterface_Second{
        public void print(){
            System.out.println(msg);
        }
        public void print2(){
            System.out.println(msg2);
        }
    }
  • 父接口可以相互转换(前提是两个父接口有一个共同的实现子类)
  • interface IMyInterface{
        String msg = "test";
        void print();
    }
    interface IMyInterface_Second{
        String msg2 = "test2";
        void print2();
    }
    class  MyInterfaceImpl implements IMyInterface,IMyInterface_Second{
        public void print(){
            System.out.println(msg);
        }
        public void print2(){
            System.out.println(msg2);
        }
    }
    class Test{
        public static void main(String[] args) {
            IMyInterface my = new MyInterfaceImpl();
            IMyInterface_Second my2 = (IMyInterface_Second)my;//父接口的相互转换
            my2.print2();
        }
    }
  • 子类的命名规范:接口名为IMyInterface,子类实现此接口,命名为MyInterfaceImpl 

接口的应用

/**
 * 定义一个USB接口
 */
interface USB{
    void insert();//usb设备插入
    void setup();//usb设备安装驱动
    void work();//usb设备正常运行
}
/**
 * 定义一个电脑类
 */
class Computer{
    public void plugIn(USB usb){
        usb.insert();
        usb.setup();
        usb.work();
    }
}
/** 
 * 定义一个USB设备实现接口
*/
class  Mouse implements USB{
    public void insert(){
        System.out.println("鼠标插入");
    }
    public void setup(){
        System.out.println("鼠标安装驱动");
    }
    public void work(){
        System.out.println("鼠标正常工作");
    }
}
class UDisk implements USB{
    public void insert(){
        System.out.println("U盘插入");
    }
    public void setup(){
        System.out.println("U盘安装驱动");
    }
    public void work(){
        System.out.println("U盘正常工作");
    }
}
class Test{
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.plugIn(new Mouse());
        computer.plugIn(new UDisk());
    }
}

通过以上代码我们发现:接口和对象多态性的概念结合之后,对于参数的统一更加明确了。而且可以发现接口是在
类之上的设计抽象。

接口的使用限制

1.接口中只允许public权限(无论是常量还是方法,都是public权限,即便不写权限修饰符也是public)

           99%的接口只提供抽象方法。很少在接口里提供全局常量

           阿里编码规约:接口中不用出现任何修饰符号,public也不加

2.当子类既需要实现接口又要继承抽象类时,先使用extends继承一个抽象类,而后使用implements实现多个接口。

3.一个抽象类可以使用implements实现多个接口,接口不能继承抽象类

4.接口可以使用extends继承多个接口(接口多继承)

5.接口可以定义一系列的内部结构,包括:内部普通类,内部普通类,内部接口。其中,使用static定义的内
部接口就相当于一个外部接口。

猜你喜欢

转载自blog.csdn.net/eve8888888/article/details/83277290