Java 基础进阶篇(五)—— 接口详解

news/2024/11/15 5:53:14/

文章目录

  • 一、接口概述
  • 二、接口的基本使用
  • 三、接口从 JDK 8 开始新增的方法
  • 四、接口的注意事项(了解)
  • 补充:接口与接口的关系


一、接口概述

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

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

接口的格式如下:

在这里插入图片描述

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


二、接口的基本使用

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

在这里插入图片描述

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


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

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

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("开始走");}
}
class PingPongMan implements SportMan{public static void main(String[] args) {PingPongMan man = new PingPongMan();man.run(); // 跑的很快 \n 开始走SportMan.inAddr(); // java新语法}
}

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

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

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

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

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

    interface AA{default void go(){System.out.println("AA");}
    }
    interface BB{default void go(){System.out.println("BB");}
    }
    class CC implements AA, BB{@Overridepublic void go() {AA.super.go();  // 调用 AA 接口的默认方法//System.out.println("重写的go");}
    }
    
  5. 一个类继承了父类,同时又实现了接口,父类中和接口中有同名方法(接口中是默认方法),默认用父类的。

    interface Food{default void eat(){System.out.println("接口中的eat方法");}
    }
    class Animal {public void eat(){System.out.println("父类中的eat方法");}
    }
    class Cat extends Animal implements Food{}
    
    public class Test {public static void main(String[] args) {Cat cat = new Cat();cat.eat(); // 父类中的eat方法}
    }
    
  6. 一个接口继承多个接口,多个接口中存在规范冲突则不能多继承。


补充:接口与接口的关系

类与类:单继承,一个类只能继承一个直接父类。
类与接口:多实现,一个类可以实现多个接口
接口与接口:多继承,一个接口可以继承多个接口。这样可以合并多个接口。


文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)


http://www.ppmy.cn/news/55653.html

相关文章

拓扑排序模板及例题

概念 一个有向无环图必然存在一个拓扑序列与之对应。 流程: 先将所有入度为0的节点入队将队列中的节点出队,出队序列就是对应拓扑序。对于弹出的节点x,遍历x所有出度y,对y进行入读减一操作检查入度减一之后的节点y,…

Docker的四种网络模式

1.Host 模式 通常来讲,启动新的Docker容器,都会分配独立的Network Namespace隔离子系统,如果在运行是指定为host模式,那么Docker容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace子…

Nautilus Chain 测试网第二阶段,推出忠诚度计划及广泛空投

随着更多的公链底层面向市场,通过参与早期测试在主网上线后获得激励成为了行业的一个热点话题,在 Apots、Arbitrum One、Optimism等陆续发放了测试空投后,以 Layer3为主要特性的 Nautilus Chain 也在前不久明确表示将会有空投,引发…

SDK_examples问题汇总

CompParameter 看起来可以用 拖动中间的dialog框 调整下面的参数 GraphicsViewDropEvent 点击“模型库”或者“用户模型”会弹出如下,点击“中止”后退出页面 MassSpringDamperApp 成功过,现在点击“开始仿真”会显示仿真失败 MwBatchSimPlu…

【数据结构初阶】环形链表

目录 一、判断链表中是否存在环思路分析 二、求环的长度三、求入环点 一、判断链表中是否存在环 题目链接: 判断链表中是否存在环 思路 把它转换为追击问题(快慢指针) 快指针比慢指针多走一步,当快指针正好进入环时,慢…

New Year Garland(计数类DP)

New Year Garland 题意 ​ 用m种颜色的球装饰n层的圣诞树,圣诞树的第i层由 l i l_{i} li​个彩球串成,且同一层相邻的球颜色不同,相邻的层之间彩球颜色的集合不同,问有多少种方案,对p取模。 分析 ​ 首先先计算每一…

C++ 使用动态内存创建一个类

使用动态内存的一个常见原因是允许多个对象共享相同的状态。 例如,假定我们希望定义一个名为Blob 的类,保存一组元素。与容器不同,我们希望Blob对象的不同拷贝之间共享相同的元素。即,当我们拷贝一个Blob时,原Blob对象…

Spring 属性填充源码分析(简单实用版)

属性填充 属性填充只有 3 种方式 根据名称填充 根据类型填充 思考什么时候会出现呢??? 多见于第三方框架与 Spring集成,举例:Mybatis 与 Spring集成,把 Mapper 接口注册为 BeanDefinition 时候就指定了自…