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

news/2024/10/31 1:33:18/

文章目录

  • 一、接口概述
  • 二、接口的基本使用
  • 三、接口从 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/58655.html

相关文章

自供电-测力刀柄资料整理

自供电-测力刀柄资料整理 2. 相关专利2.1 实时测量铣削过程中床主轴温度装置【1】2.2 一种基于应变片的测力系统【2】 3. 相关商业化产品3.1 spike 测力刀柄【3】3.2 瑞士奇石乐(Kistler)旋转切削测力仪【4】3.3 kistler的通用型压电式切削力测量系统3.4…

Linux Ansible导入剧本、任务滚动执行、任务并行执行

目录 任务滚动更新 配置并行 包含和导入剧本 任务滚动更新 实现在多台被管理节点执行任务时,第一台的整个playbook执行完成后再在下一台主机执行任务;通过serial元素来实现 serial:1 表示一台一台执行playbook(serial也可以指定…

Python基础合集 练习23 (错误与异常语句处理3)

‘’’ raise语句 raise[ExceptionName[(reason)]] 其中ExceptionName[(reason)]是可选参数用来指定抛出异常名称和原因,如果省略该参数,就会原样输出当前的错误 ‘’’ 在下面程序中,使用raise语句抛出ValueError异常 def num_calu(): book int(input(输入图书数量: )) stu…

MySQL知识学习05(InnoDB存储引擎对MVCC的实现)

1、一致性非锁定读和锁定读 一致性非锁定读 对于 一致性非锁定读(Consistent Nonlocking Reads) ,通常做法是加一个版本号或者时间戳字段,在更新数据的同时版本号 1 或者更新时间戳。查询时,将当前可见的版本号与对…

【IDEA Sprintboot】简单入门:整合SpringSecurity依赖、整合Thymeleaf框架

目录: 1、【IDEA】简单入门:请求数据库表数据_水w的博客-CSDN博客 目录 三、 1、整合SpringSecurity依赖 2、整合Thymeleaf框架 解决css样式等静态资源访问不到的问题 三、 1、整合SpringSecurity依赖 Spring Security是一个能够为基于Spring的企业…

三、进度管理

3、 [单选] 一个项目实施团队需要满足一份非常严格的进度计划。相对于已完成的事项,这样会导致正在进行的工作超过负荷。为了解决这个问题,项目经理需要获得额外的资源。项目经理应该向发起人提供什么理由来支持追加资源的请求? A project im…

【第十一届泰迪杯B题】问题一和问题二的分析

文章目录 一、问题一的分析1.1 总体分析1.2 不同价格对需求量的影响1.3 不同区域对需求量的影响1.4 不同销售方式的需求量特性1.5 不同品类的需求量特性1.6 不同时间段的需求量特性1.7 节假日对需求量的影响1.8 促销对需求量的影响1.9 季节因素对需求量的影响二、问题二的分析一…

LeetCode单链表OJ题目做题思路分享

目录 移除链表元素链表的中间节点链表中倒数第K个节点合并两个有序链表 移除链表元素 链接: link 题目描述: 思路分享: 我们上个博客分享了第一种方法,下面我们分析第二种方法:思路就是将每一个不等于我们要删除的值的节点依次尾…