【Java基础】接口的基本使用

思维导图

接口

一、什么是接口

接口代表一种能力或约束

Java为单继承,当父类的方法种类无法满足子类需求时,可实现接口扩充子类能力。

interface MyInterface {
    void method();
}
  • 接口没有构造方法
  • 只能定义公开静态常量、公开抽象方法
  • 使用 interface 关键字定义接口

接口的好处

  • 程序耦合度降低
  • 更自然的使用多态
  • 设计与实现完全分离
  • 更容易搭建程序框架
  • 更容易更换具体实现

二、接口与类

2.1 类实现单个接口

定义一个接口

/**
 * 接口。
 * @author 张宝旭
 */
public interface MyInterface {
    // 定义公开静态常量
    public static final String NAME = "zbx";
    Integer AGE = 21; // 前面的 public static final 可以省略,默认存在
    
    // 定义公开静态方法
    public abstract void show();
    void run(); // 前面的 public abstract 可以省略,默认存在
}

实现接口

使用 implements 实现接口,必须重写接口中的所有方法

/**
 * 接口实现类。
 *
 * @author 张宝旭
 */
public class MyInterfaceImpl implements MyInterface{
    @Override
    public void show() {
        System.out.println("show");
    }

    @Override
    public void run() {
        System.out.println("run");
    }
}

测试

使用接口去创建一个实例:同父类一样,接口也可声明为引用,并指向实现类对象。

  • 仅可调用接口中所声明的方法,不可调用实现类中独有的方法
  • 可强转回实现类本身类型,进行独有方法调用
/**
 * 接口测试。
 *
 * @author 张宝旭
 */
public class MyInterfaceTest {
    public static void main(String[] args) {
        MyInterface myInterface = new MyInterfaceImpl();
        myInterface.show();
        myInterface.run();
    }
}

2.2 类实现多个接口

实现多继承接口:中间用逗号隔开

/**
 * 接口实现类。
 *
 * @author 张宝旭
 */
public class MyInterfaceImpl implements MyInterface, Flyable{
    @Override
    public void show() {
        System.out.println("show");
    }

    @Override
    public void run() {
        System.out.println("run");
    }

    @Override
    public void fly() {
        System.out.println("fly");
    }
}

2.3 接口继承接口

/**
 * 接口。
 * @author 张宝旭
 */
public interface MyInterface extends Flyable, Swimable{
}

2.4 接口的多态

使用不同引用创建的对象,访问权限也不同

/**
 * 接口测试。
 *
 * @author 张宝旭
 */
public class MyInterfaceTest {
    public static void main(String[] args) {
        MyInterface myInterface = new MyInterfaceImpl();
        myInterface.run(); // 只能调用run()方法

        Flyable flyable = new MyInterfaceImpl();
        flyable.fly(); // 只能调用fly()方法

        Swimable swimable = new MyInterfaceImpl();
        swimable.swim(); // 只能调用swim()方法

        MyInterfaceImpl myInterface1 = new MyInterfaceImpl();
        myInterface1.run(); // 可以调用全部方法,包括自己特有的方法
        myInterface1.fly();
        myInterface1.swim();
        myInterface1.eat();
    }
}

2.5 常量接口

将多个常用于表示状态或固定值的变量,以静态常量的形式定义在接口中统 一管理,提高代码可读性

public interface ConstInterface {
    String NAME = "zbx";
    Integer AGE = 21;
}

2.6 标记接口

不实现任何内容,仅作为标记

public interface LabelInterface {
}

三、接口与抽象类的区别

相同

  • 可编译成字节码文件
  • 不能创建对象
  • 可以作为引用类型
  • 具备Object类中所定义的方法

不同

  • 接口中的变量只能定义成 public static final 类型的,抽象类中的变量与普通类相同
  • 接口中的方法都为抽象方法,抽象类中可以有非抽象方法
  • 接口中没有构造方法、动态代码块、静态代码块
  • 接口中JDK1.8之后可以定义static方法和default方法

详细讲解:实例分析Java接口和抽象类的区别,以及如何去使用它们(JDK1.8 新版本)


四、接口的规范

ᕙ༼ຈلﻝ͜ ຈ༽ᕗI’m the power

当定义的接口表示一种能力时,应定义成以 able 结尾的名字

/**
 * @author 张宝旭
 */
public interface Flyable {
    void fly();
}

  • 任何类在实现接口时,必须实现接口中所有的抽象方法
  • 实现接口中的抽象方法,访问修饰符必须是 public
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值