Java interface 接口

接口(interface)

接口的理解

接口就是规范,定义的是一组规则,体现了现实世界中"如果你是/要...则必须能..."的思想。继承是一个"是不是"的is-a关系,而接口实现则是 "能不能"的has-a关系。

接口的本质是契约、标准、规范,就像我们的法律一样。制定好后大家都要遵守。

接口的定义

定义接口的关键字:interface

声明格式:
java 复制代码
[修饰符] interface 接口名{
    //接口的成员列表:
    // 公共的静态常量
    // 公共的抽象方法
    
    // 公共的默认方法(JDK1.8以上)
    // 公共的静态方法(JDK1.8以上)
    // 私有方法(JDK1.9以上)
}
  • 声明属性:必须使用public static final修饰

  • 声明方法: jdk8之前,声明抽象方法,修饰为public abstract

    ​ jkd8: 声明静态方法、默认方法

    ​ jdk9:声明私有方法

    不可以使用interface声明: 构造器、代码块等

interface的使用

接口和类的关系:实现关系

java 复制代码
interface Flyable{
    //接口
    //全局常量
    public static final int MIN_SPEED = 0;      //最低速度
    //可以省略 public static final
    //自动默认为静态final的常量
    int MAX_SPEED = 7900;   //最高速度
    
    public abstract void fly(); //默认为抽象方法,可以省略public abstract 
    //抽象方法,无方法体
}

interface Attackable{
    //接口
    public abstract void attack();
}
class Plane implements Flyable,Attackable{
    //实现Flyable接口
    //接口中存在抽象方法:① 使用abstract修饰方法,使方法为抽象方法
    //                ② 重写抽象方法
    public void fly(){
        System.out.println("Plane.fly");
    }

    @Override
    public void attack() {
        System.out.println("Plane.attack");
    }
}
具体格式:
java 复制代码
class A extend SuperA implements B,c{
    
    
}
//A是SuperA的子类
//A 是 B,C的 实现类
注意点:

一个接口中的所有属性都默认为public final修饰,为常量,赋值后不可更改

一个接口中所有的方法,都为public abstrace修饰,为抽象方法

  • 一个类可以实现多个接口
  • 类针对于接口的多实现,一定程度上就弥补了类的单继承的局限性
  • 一个类实现了一个接口,这个类必须将实现接口中所有的抽象方法进行重写,否则要将此类声明为抽象类

接口和接口的关系:继承关系

使用关键字extends进行继承

java 复制代码
interface AA{
    void method1();	//抽象方法,无方法体
}

interface BB{
    void method2();
}

interface CC extends AA,BB{//接口可以多继承
    
}

接口的多态性

接口名 变量名 = new 实现类对象
java 复制代码
package interfaceTest;

public class UsbTest {
    public static void main(String[] args) {
        //1,创建接口实现类的对象
        Computer computer = new Computer();
        Printer printer = new Printer();
        //2.创建接口实现类的匿名对象
        computer.transferDate(printer);
        //多态的体现

        computer.transferDate(new Camera());
        
        //3. 创建接口匿名实现类的对象
        USB usb1 = new USB(){
            @Override
            public void start() {
                System.out.println("U盘开始工作");
            }

            @Override
            public void stop() {
                System.out.println("U盘停止工作");
            }
        };
        computer.transferDate();
    }
}

class Computer{ //电脑类
    public void transferDate(USB usb){
        System.out.println("设备连接成功");
        usb.start();
        System.out.println("数据传输细节操作");
        usb.stop();
    }
}

class Printer implements USB{
    @Override
    public void start() {
        System.out.println("打印机工作");
    }

    @Override
    public void stop() {
        System.out.println("打印机结束工作");
    }
}

class Camera implements USB{
    @Override
    public void start() {
        System.out.println("照相机工作");
    }

    @Override
    public void stop() {
        System.out.println("照相机结束工作");
    }
}
interface USB{
    //声明常量  省略
    public abstract void start();
    void stop();
}
相关推荐
Tanecious.25 分钟前
机器视觉--python基础语法
开发语言·python
叠叠乐31 分钟前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
战族狼魂1 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
Tttian6222 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
xyliiiiiL2 小时前
ZGC初步了解
java·jvm·算法
杉之2 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
hycccccch3 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
独好紫罗兰3 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法
zhuyixiangyyds4 小时前
day21和day22学习Pandas库
笔记·学习·pandas
天天向上杰4 小时前
面基JavaEE银行金融业务逻辑层处理金融数据类型BigDecimal
java·bigdecimal