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();
}
相关推荐
欧阳枫落2 分钟前
python 2小时学会八股文-数据结构
开发语言·数据结构·python
何曾参静谧9 分钟前
「QT」文件类 之 QTextStream 文本流类
开发语言·qt
monkey_meng13 分钟前
【Rust类型驱动开发 Type Driven Development】
开发语言·后端·rust
落落落sss21 分钟前
MQ集群
java·服务器·开发语言·后端·elasticsearch·adb·ruby
我救我自己21 分钟前
UE5运行时创建slate窗口
java·服务器·ue5
2401_8532757342 分钟前
ArrayList 源码分析
java·开发语言
zyx没烦恼42 分钟前
【STL】set,multiset,map,multimap的介绍以及使用
开发语言·c++
lb363636363642 分钟前
整数储存形式(c基础)
c语言·开发语言
feifeikon44 分钟前
Python Day5 进阶语法(列表表达式/三元/断言/with-as/异常捕获/字符串方法/lambda函数
开发语言·python
爪哇学长1 小时前
SQL 注入详解:原理、危害与防范措施
xml·java·数据库·sql·oracle