接口的详解

   接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

一、语法规则

        接口的定义格式与定义类的格式基本相同,将class关键字换成interface关键字,就定义了一个接口

//接口是一个公共标准,是规范,因此接口中的方法在定义的时候都不给方法体,接口里的方法全是抽象方法
public interface IUSB {
    void openUSB();

    void closeUSB();

}

注意:

    1、创建接口时,接口的命名一般以大写字母I开头

    2、接口的命名一般使用“形容词”词性的单词

    3、阿里编码规范中规定,接口中的方法和属性不要加任何修饰符号,保持代码的简洁性

二、接口的使用

   接口不能直接使用,必须要有一个“实现类”来“实现”该接口,实现接口中所有的抽象方法

public class 类名称 implements 接口名称{
      ......
}

注意:子类和父类是extends继承关系,类与接口之间是implements实现关系

以下举一个笔记本电脑使用USB鼠标和USB键盘的例子: 

//接口是一个公共标准,是规范,因此接口中的方法在定义的时候都不给方法体,接口里的方法全是抽象方法
public interface IUSB {
    void openUSB();

    void closeUSB();

}
public class Mouse implements IUSB{

    @Override
    public void openUSB() {
        System.out.println("打开鼠标");
    }

    @Override
    public void closeUSB() {
        System.out.println("关闭鼠标");
    }

    public void click(){
        System.out.println("点击鼠标");
    }
}
public class KeyBoard implements IUSB{
    @Override
    public void openUSB() {
        System.out.println("打开键盘");
    }

    @Override
    public void closeUSB() {
        System.out.println("关闭键盘");
    }

    public void input(){
        System.out.println("通过键盘输入");
    }
}
public class Computer {

    public void powerOn(){
        System.out.println("电脑开机");
    }

    public void powerOff(){
        System.out.println("电脑关机");
    }

    public void useUSB(IUSB usb){
        usb.openUSB();

        if(usb instanceof Mouse){
            Mouse mouse  = (Mouse)usb;
            mouse.click();
        } else if(usb instanceof KeyBoard){
            KeyBoard keyBoard = (KeyBoard)usb;
            keyBoard.input();
        }

        usb.closeUSB();
    }
}
public class TestComputer {
    public static void main(String[] args) {

        //注意:接口的引用可以指向任意实现该接口的对象,接口的引用可以指向不同实现类的对象,因此就可以实现多态
        IUSB use = new Mouse();
        use = new KeyBoard();

        Computer computer = new Computer();

        computer.powerOn();

        computer.useUSB(new Mouse());
        computer.useUSB(new KeyBoard());

        computer.powerOff();
    }
}

输出结果为:

三、接口特性

     1、接口类型是一种引用类型,但是不能直接new接口的对象

     2、接口中的每个方法都是public的抽象方法,即接口中的方法会被隐式的指定为public abstract,其他修饰符都会报错

     3、接口中的方法是不能在接口中实现的,只能由实现接口的类来实现

     4、重写接口中的方法时,不能使用default访问权限修饰

     5、接口中可以含有变量,但是变量会被隐式指定为public static final变量

     6、接口中不能有静态代码块、实例代码块和构造方法

         接口中不能有实例代码块和构造方法:实例代码块中的内容经过编译后,按照其在类中声明的次序,需要依次加载到构造方法的前面,而构造方法的作用是初始化对象,给对象的普通的成员变量一个合适的初始值,因此构造方法肯定有自己的实现体,即构造方法不能是抽象方法,因为矛盾

      7、接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class

      8、如果类没有实现接口类中的所有方法,则类必须设置为抽象类

      9、在jdk8:接口中还可以包含default方法,可以在不影响接口的实现类的前提下为接口添加新的功能特性,通过在接口定义的方法的访问修饰符前面加上default,那么接口的实现类可以不用实现该方法

四、实现多个接口

     Java中不支持单继承,但是一个类可以实现多个接口

 以下代码加深理解:

public interface IRunning {
    void run();
}
public interface ISwimming {
    void swim();
}
public interface IFlying {
    void fly();
}
public interface IAmphibious extends IRunning,ISwimming{
    //在Java中一个接口可以去继承多个接口
}
public abstract class Animal {
    public String name;
    public String gender;
    public int age;

    //所有的动物都需要吃饭睡觉,这是动物的公共方法
    public abstract void eat();
    public abstract void sleep();
}
public class Dog extends Animal implements IRunning,ISwimming{

    @Override
    public void eat() {
        System.out.println(name + "吃骨头");
    }

    @Override
    public void sleep() {
        System.out.println(name + "睡觉呼呼呼");
    }

    @Override
    public void run() {
        System.out.println(name + "用四个蹄子跑");
    }

    @Override
    public void swim() {
        System.out.println(name + "狗刨游泳");
    }
}
public class Frog implements IAmphibious{//青蛙是两栖动物
    @Override
    public void run() {
        System.out.println("会跑");
    }

    @Override
    public void swim() {
        System.out.println("会游泳");
    }
}

注:类和类之间是extends继承关系,而且是单继承

       类和接口之间是implements实现关系,而且一个类可以实现多个接口

       接口和接口之间是extends关系,一个接口可以继承多个接口

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薰衣草2333

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值