当前位置: 首页 > news >正文

JavaSE16-面向对象-接口

文章目录

  • 一、概念
  • 二、格式
    • 1.使用interface来定义接口
    • 2.implements实现接口
  • 三、接口中的成员
    • 1.常用成员
    • 2.新增成员(不重要)
      • 2.1 默认方法
      • 2.2 静态方法
    • 2.3 私有方法
  • 四、继承关系 & 实现关系
  • 五、抽象类和接口的使用区别

一、概念

接口就是规范\规则,我们可以使用接口来定义一些规则
(比如要求某个方法的方法名必须叫什么,方法的参数列表必须是什么,方法的返回值类型必须是什么)

二、格式

1.使用interface来定义接口

public interface 接口名{//定义抽象方法。public abstract被省略了void method();
}

2.implements实现接口

果要实现多个接口,多个接口名用逗号分开。我们在理解的时候可以把接口理解成是一个特殊的父类。

public class 类名 implements 接口名{}

三、接口中的成员

1.常用成员

jdk7版本中接口中只能有常量和抽象方法

  • 接口中定义不了成员变量,定义的成员变量默认都会修饰为:public static final
  • 定义的方法默认修饰符为public abstract**
public interface InterfaceA {//常量int NUM =10;//等价于public static final int NUM =10;//抽象方法void method();//等价于  public abstract void method();
}

2.新增成员(不重要)

默认方法、静态方法、私有方法

2.1 默认方法

  1. 在jdk8中允许我们在接口中定义默认方法。默认方法允许有方法体。
  2. 默认方法可以选择不进行重写。也可以重写,看需要。
  3. 注意事项:如果两个接口中有相同的默认方法。一个类同时实现了这两个接口,必须要重写该方法。
  4. 应用场景:如果在接口升级的时候某些方法并不想让所有的实现类进行重写,可以使用默认方法来定义。
public interface InterfaceA {//默认方法:使用defaut关键字进行修饰。default void method(){}
}

2.2 静态方法

  1. 在jdk8中允许我们在接口中定义静态方法。静态方法允许有方法体。
  2. 静态方法不能被重写。
  3. 应用场景:如果在接口升级的时候需要给接口增加一些工具方法。不想让实现类去重写该方法,可以使用静态方法来定义。
public interface InterfaceA {//静态方法:使用static关键字进行修饰。static void staticMethod(){}
}public class Demo {public static void main(String[] args) {//使用接口名.方法名(参数)  来调用InterfaceA.staticMethod();}
}

2.3 私有方法

  1. 在jdk9中允许我们在接口中定义私有方法。私有方法允许有方法体。
  2. 私有方法不可以被重写
  3. 应用场景:对默认方法或者是静态方法中重复的代码进行抽取,提高代码复用度。
public interface InterfaceA {
// 使用private修饰
//加上static的原因:静态方法只能调用静态方法,如果是静态方法调用就要在此方法中加上staticprivate static void privateStaticMethod(){}private  void privateMethod(){}
}

四、继承关系 & 实现关系

  • 在java中一个类可以实现多个接口
 public class Person implements InterfaceA,InterfaceB{}
  • 在java中接口和接口之间可以有继承关系。继承之后实现类会把父接口的成员继承下来。
public interface InterfaceC  extends InterfaceA{}

五、抽象类和接口的使用区别

  1. 接口中的基本都是抽象的,而在抽象类中可以有一部分是非抽象方法。而非抽象类中是不可以有抽象方法的。
  2. 接口是最抽象的,其次是抽象类,最后是非抽象类。​
  3. 所以我们最顶层设计成接口,然后实现类设计成抽象类(实现部分抽象方法),抽象类的子类可以设计成非抽象类(对剩下的所有抽象方法进行实现)。
http://www.lryc.cn/news/24547.html

相关文章:

  • 安卓设备蓝牙键盘快捷键
  • Puppeteer项目结构梳理
  • (02)Unity HDRP Volume 详解
  • 拒绝B站邀约,从月薪3k到年薪47W,我的经验值得每一个测试人借鉴
  • 分享一种实用redis原子锁的方式
  • 【华为OD机试】 字符串解密(C++ Java JavaScript Python)
  • 金三银四,助力你的大厂梦,2023年软件测试经典面试真题(1)(共3篇)
  • 假如面试官要你手写一个promise
  • 【leetcode】寻找重复数
  • LeetCode 1247. Minimum Swaps to Make Strings Equal【数学,贪心,字符串】
  • pid控制加热算法,附代码仓库
  • 一文看懂预训练和自训练模型
  • (五十四)大白话索引的页存储物理结构,是如何用B+树来实现的?.md
  • 前端Vue代码风格指南
  • 「TCG 规范解读」基础设施架构和协议 (2)
  • NodeJs 中的 HTML 模板
  • 3.ffmpeg命令行环境搭建、ffmpeg命令行初步了解
  • Kubernetes初始化容器
  • leetcode: Swapping Nodes in a Linked List
  • Nydus 在约苗平台的容器镜像加速实践
  • 企业对不同形态CRM系统价格需求不同
  • 「JVM 高效并发」线程安全
  • 微信扫码登录
  • Unity协程的简单应用
  • LeetCode 1250. Check If It Is a Good Array【数论】
  • ETHDenver 2023
  • React架构演变
  • 安全认证--JWT介绍及使用
  • 【计算机组成原理】计算机硬件的基础组成、认识各个硬件部件
  • 使用ChIPSeeker进行ChIP-seq, ATAC-seq,cuttag等富集峰的基因组注释