接口

接口的定义与使用

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

接口定义:接口就是一个抽象方法与全局常量的集合(纯粹版本的抽象类(JDK8前))

  • 接口使用:interface + 类名

  • 接口的命名规范:接口前加 I 来区分接口与类


interface IMyinterface {
    public static final String MSG = "test";//全局常量
    public abstract void test();//抽象方法
}

  • 子类实现接口使用 implements关键字,并且子类可以同时实现多个父接口(可以使用接口来实现多继承,父接口之间的相互转化)。一般使用接口名+Impl来命名子类
interface IMyInterface {
    public static final String MSG = "test";//全局常量
    public abstract void test();//抽象方法
}
interface INews {
    public abstract void fun();
}

class MyInterfaceImlp implements IMyInterface,INews {
    public void test() {
        System.out.println(MSG);
    }
    public void fun() {
        System.out.println(MSG);
    }
}

class Test {
    public static void main(String[] args) {
        IMyInterface myInterface = new MyInterfaceImlp();
        myInterface.test();
        INews news = new MyInterfaceImlp();
        news.fun();
    }
}

接口的使用限制

  • 接口中只有public权限(不管是属性还是方法,其权限都是public)
    • 接口中public、static、final、abstract都可以省略
    • 阿里编码规约:接口中方法和属性不要加任何修饰符,public也不要加,保证代码简洁性

interface IMyinterface {
    String MSG = "test";//全局常量
    void test();//抽象方法
}

  • 当一个子类既需要实现接口又需要继承抽象类时,请先使用extends继承一个抽象类,而后使用implements实现多个接口
interface IMyInterface {
    String MSG = "test";
    void test();
}
interface INews {
    void fun();
}

abstract class Person {
    public abstract void print();
}

class MyInterfaceImlp extends Person implements IMyInterface,INews {
    public void test() {
        System.out.println(MSG);
    }
    public void fun() {
        System.out.println(MSG);
    }
    public void print() {
        System.out.println(MSG);
    }
}

class Test {
    public static void main(String[] args) {
        IMyInterface myInterface = new MyInterfaceImlp();
        myInterface.test();
        INews news = new MyInterfaceImlp();
        news.fun();
        Person per = new MyInterfaceImlp();
        per.print();
    }
}
  • 抽象类可以使用implements实现接口,但是接口不能extends抽象类
  • 接口可以使用extends继承多个父接口
interface A {
    void test1();
}
interface B {
    void test2();
}
interface C extends A,B {
    void test3();
}

class D implements C {
    public void test1() {
        System.out.println("接口1");
    }
    public void test2() {
        System.out.println("接口2");
    }
    public void test3() {
        System.out.println("接口3");
    }
    public void test4() {
        System.out.println("接口4");
    }
}
class Test {
    public static void main(String[] args) {
        D d = new D();
        d.test1();
        d.test2();
        d.test3();
        d.test4();
    }
}

接口的应用

  • 定义操作标准(USB2.0标准)

  • 表示一种能力,进行一项操作

  • 在分布式开发时暴露远程服务能力

现在要求描述一个概念-电脑上可以使用任何的usb设备(U盘,打印机等等):

//标准
interface USB {
    void plugIn();  //插入
    void setup();   //安装驱动
    void work();    //正常使用
}

class Mouse implements USB {
    public void plugIn() {
        System.out.println("鼠标插入电脑");
    }
    public void setup() {
        System.out.println("安装鼠标驱动");
    }
    public void work() {
        System.out.println("鼠标正常使用");
    }
}

class Keyboard implements USB {
    public void plugIn() {
        System.out.println("键盘插入电脑");
    }
    public void setup() {
        System.out.println("安装键盘驱动");
    }
    public void work() {
        System.out.println("键盘正常使用");
    }
}

class Computer {
    public void test(USB usb) {
        usb.plugIn();
        usb.setup();
        usb.work();
    }
}
class Test {
    public static void main(String[] args) {
        Computer computer = new Computer();
        computer.test(new Mouse());
        computer.test(new Keyboard());
    }
}

抽象类与接口的区别

在这里插入图片描述

除了单继承的局限之外,实际上使用抽象类和接口都是类似的。在实际开发中,抽象类的设计比接口复杂。

  1. 接口是Java的核心,慢慢会学到接口更多的使用与设计。
  2. 开发之中优先考虑接口,以避免单继承局限。
  3. 抽象类是模板,有层次感;接口则更关心行为与混合。开发之中优先考虑接口,以避免单继承局限。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值