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();
}
相关推荐
动亦定31 分钟前
页面导出大量数据导致响应超时解决方案
java·mysql
箫笙默33 分钟前
JS基础 - 正则笔记
开发语言·javascript·笔记
لا معنى له39 分钟前
残差网络论文学习笔记:Deep Residual Learning for Image Recognition全文翻译
网络·人工智能·笔记·深度学习·学习·机器学习
xxp43211 小时前
Qt 网络编程 TCP通信
开发语言·qt
q***06291 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
还是鼠鼠1 小时前
Redisson实现的分布式锁能解决主从一致性的问题吗?
java·数据库·redis·分布式·缓存·面试·redisson
d***95621 小时前
windows配置永久路由
java
T***u3331 小时前
PHP在电商中的会员管理
开发语言·wireshark·php·ue4·jina
张丶大帅1 小时前
JS案例合集
开发语言·javascript·笔记
王桑.2 小时前
IO流高级流--转换流
java