【Java-Day12】接口

目录

一.接口

二.接口中的成员变量的特点

JDK8以后接口中新增的方法:

[1.允许在接口中定义默认方法,需要使用关键字 default 修饰](#1.允许在接口中定义默认方法,需要使用关键字 default 修饰)

[2.允许在接口中定义静态方法,需要用 static 修饰](#2.允许在接口中定义静态方法,需要用 static 修饰)

[3.允许在接口中定义私有方法,用 private 修饰](#3.允许在接口中定义私有方法,用 private 修饰)

三.接口和类之间的关系


一.接口

接口: 接口就是一个规则,而且是独立于继承体系以外的规则。(可以理解为干爹)

格式:关键字 interface 来定义

public interface 接口名{...}

使用: 接口和类之间的是实现关系,通过implements 关键字表示

public class 类名 implements 接口{...} //定义接口

public class 类名 extends 父类{...} //定义继承类

注意:

  1. 接口不能实例化
  2. 接口的子类(实现类),要么重写接口中所有的抽象方法,要么实现类是一个抽象类
  3. 一个类可以实现多个接口,也可以在继承一个类的同时,实现多个接口

public class 类名implements 接口1,接口2{...}

public class 类名 extends 父类 implements接口1,接口2{...}

二.接口中的成员变量的特点

**成员变量:**只能是常量。默认修饰符:public static final

接口中没有构造方法。

成员方法:JDK7之前接口里的方法默认是抽象方法,是为了定义行为规范,强制类遵循,必须重写。

JDK8以后接口中新增的方法:

1.允许在接口中定义默认方法,需要使用关键字 default 修饰

**作用:**为了接口升级时,代码不报错。(在之前接口里定义的方法必须被实现类重写)

接口中默认方法的定义格式:

格式: public default 返回值类型 方法名(参数列表){ }

**范例:**public default void show(){ }

接口中默认方法的注意事项:

  1. 默认方法不是抽象方法 ,所以不强制被重写。但是如果被重写,重写的时候去掉default关键字
  2. public可以省略,default不能省略
  3. 如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写

2.允许在接口中定义静态方法,需要用 static 修饰

接口中静态方法的定义格式:

格式 :public static 返回值类型 方法名(参数列表){ }

范例: public static void show(){ }

接口中静态方法的注意事项:

  1. 静态方法只能通过接口名调用,不能通过实现类名或者对象名调用
  2. 静态方法不能重写
  3. public可以省略,static不能省略

3.允许在接口中定义私有方法,用 private 修饰

接口中的私有方法(为本接口内的默认/静态方法服务,不给外界使用):

(1).普通的私有方法

作用: 为了抽取**默认方法(default)**中重复代码而出现的

格式: private 返回值类型 方法名(参数列表){ }

(2).静态的私有方法

作用: 为了抽取静态方法中重复代码而出现的

格式: private static 返回值类型 方法名(参数列表){ }


三.接口和类之间的关系

类和类的关系

  • 继承关系,只能单继承,不能多继承,但是可以多层继承

类和接口的关系

  • 实现关系,类实现接口,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口

接口和接口的关系

  • 继承关系,可以单继承,也可以多继承
相关推荐
wuminyu10 分钟前
C++协程实现接收端的零拷贝Buffer管理原理剖析
java·linux·c语言·jvm·c++
m0_3807438729 分钟前
C++中的freopen的用法实例详解
开发语言·c++
Escalating_xu1 小时前
【Python】基础语法(1):常量、变量、类型、输入输出与运算符
开发语言·python
jimy11 小时前
polymorph.cpp里面的“析构函数、智能指针”问题
开发语言·c++
m0_380743871 小时前
PHP 8.3 缓存清除不生效怎么排查
开发语言·php
朝朝辞暮i2 小时前
C++ 第 6 课:switch —— 多状态选择
开发语言·c++·算法
小凡geo2 小时前
本地商家 GEO:用脚本一键生成 FAQPage 结构化数据,让 AI 切片更稳
开发语言·人工智能·python·microsoft·搜索引擎·ai
朝朝辞暮i2 小时前
C++ 第 4 课:if / else —— 让程序自己做决定
开发语言·c++
波力海苔夹心脆6752 小时前
C# 值类型与引用类型详解:存储位置、赋值机制、参数传递、相等比较、装箱拆箱与常见陷阱
开发语言·jvm·经验分享·笔记·c#·.net
蜗牛互联网3 小时前
WSL Containers GA:本地AI容器的生命周期、网络与治理验收
java·网络·人工智能·后端