Java 中 接口的基本使用

一、接口概述

规范的基本特征是约束和公开。 接口就是一种规范,其约束别人必须干什么事情。

所以:接口中的抽象方法,默认会自动加上 public abstract 修饰,不写也有。 所以:接口中的常量,默认加上 public static final 修饰,不写也有。

接口的格式如下:

注: JDK8 之前接口中只能是抽象方法和常量,没有其他成分;接口不能实例化。

二、接口的基本使用

接口是用来被类实现 implements 的,实现接口的类称为实现类。 一个类可以实现多个接口。

注意: 一个类实现多个接口,必须重写完全部接口的全部抽象方法,否则这个类必须成为抽象类。

三、接口从 JDK 8 开始新增的方法

接口从 JDK 8 开始新增了 3 个方法,新增三种方法给Java自己用的,为了方便项目维护。 我们只需要知道有这三种方法,并且明白特点会访问即可。

csharp 复制代码
public interface SportMan {
    /**
     * 1、默认方法。
     *      JDK8开始;
     *      必须使用 default 修饰,默认用 public 修饰;
     *      默认方法,接口不能创建对象,这个方法只能过继给实现类,由实现类的对象调用。
     */
    default void run(){
        System.out.println("跑的很快");
        go();
    }

    /**
     * 2、静态方法
     *      必须使用 static 修饰,默认用 public 修饰;
     *      接口的静态方法,必须使用接口名调用。
     */
    public static void inAddr(){
        System.out.println("java新语法");
    }

    /**
     * 3、私有方法(实例方法,对象触发)
     *      JDK 1.9开始才支持的。必须在接口内部才能访向
     */
    private void go(){
        System.out.println("开始走");
    }
}
typescript 复制代码
class PingPongMan implements SportMan{
    public static void main(String[] args) {
        PingPongMan man = new PingPongMan();
        man.run(); // 跑的很快 \n 开始走
        SportMan.inAddr(); // java新语法
    }
}

四、接口的注意事项(了解)

接口不能创建对象。(更加彻底的抽象)

一个类实现多个接口,多个接口的规范不能冲突。(如:不同的返回值类型的同名方法,会导致规范冲突)

一个类实现多个接口,多个接口中有同样的静态方法不冲突。(因为使用接口名调用)

一个类实现多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可,或者使用 接口名.super.方法名()。

csharp 复制代码
interface AA{
    default void go(){
        System.out.println("AA");
    }
}
interface BB{
    default void go(){
        System.out.println("BB");
    }
}
class CC implements AA, BB{
    @Override
    public void go() {
        AA.super.go();  // 调用 AA 接口的默认方法
        //System.out.println("重写的go");
    }
}

一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法(接口中是默认方法),默认用父类的。

scala 复制代码
interface Food{
    default void eat(){
        System.out.println("接口中的eat方法");
    }
}
class Animal {
    public void eat(){
        System.out.println("父类中的eat方法");
    }
}
class Cat extends Animal implements Food{

}
typescript 复制代码
public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.eat(); // 父类中的eat方法
    }
}

一个接口继承多个接口,多个接口中存在规范冲突则不能多继承。

补充:接口与接口的关系

类与类:单继承,一个类只能继承一个直接父类。

类与接口:多实现,一个类可以实现多个接口

接口与接口:多继承,一个接口可以继承多个接口。这样可以合并多个接口。

相关推荐
9号达人13 小时前
普通公司对账系统的现实困境与解决方案
java·后端·面试
golang学习记13 小时前
Go 1.26 新特性:netip.Prefix.Compare —— 标准化 IP 子网排序能力
后端
超级苦力怕13 小时前
Java 为何 long a = 999999999 能过;long a = 9999999999 报错?一文讲透“宽化转换”
java
佐杰13 小时前
Jenkins使用指南1
java·运维·jenkins
花落已飘13 小时前
openEuler容器化实践:从Docker入门到生产部署
后端
dllxhcjla13 小时前
三大特性+盒子模型
java·前端·css
Acrelhuang13 小时前
筑牢用电防线:Acrel-1000 自动化系统赋能 35kV 园区高效供电-安科瑞黄安南
java·大数据·开发语言·人工智能·物联网
Cache技术分享13 小时前
233. Java 集合 - 遍历 Collection 中的元素
前端·后端
脸大是真的好~13 小时前
黑马JAVAWeb-10 文件上传-文件存储到服务器本地磁盘-文件存储在阿里云OSS-@Value属性注入
java
大G的笔记本13 小时前
算法篇常见面试题清单
java·算法·排序算法