【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 返回值类型 方法名(参数列表){ }


三.接口和类之间的关系

类和类的关系

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

类和接口的关系

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

接口和接口的关系

  • 继承关系,可以单继承,也可以多继承
相关推荐
SimonKing1 小时前
Java程序员接入AI的另一种姿势:LangChain4j
java·后端·程序员
小小de风呀1 小时前
de风——【从零开始学 C++】(十)vector的模拟实现
开发语言·c++
右耳朵猫AI1 小时前
Rust技术周刊 2026年第20周
开发语言·后端·rust
vensli1 小时前
消息跨端架构演进:基于 C++ 的多端一致性研发框架实践
java·人工智能·软件工程·安卓
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【70】思考模式
java·人工智能·spring
逸Y 仙X1 小时前
文章六:ElasticSearch 集群通信安全权限
java·大数据·服务器·elasticsearch·搜索引擎·全文检索
kaico20181 小时前
Python 在 Jenkins Pipeline 中的使用总结
开发语言·python·jenkins
流浪0011 小时前
C++篇:深入理解 C++ 智能指针:从裸指针到 RAII 的蜕变
开发语言·c++
丘山望岳1 小时前
二叉搜索双壁——map和set
开发语言·数据结构·c++