Java interface 接口

接口(interface)

接口的理解

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

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

接口的定义

定义接口的关键字:interface

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

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

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

    ​ jdk9:声明私有方法

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

interface的使用

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

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");
    }
}
具体格式:
class A extend SuperA implements B,c{
    
    
}
//A是SuperA的子类
//A 是 B,C的 实现类
注意点:

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

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

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

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

使用关键字extends进行继承

interface AA{
    void method1();	//抽象方法,无方法体
}

interface BB{
    void method2();
}

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

接口的多态性

接口名 变量名 = new 实现类对象
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();
}

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值