Java中的接口
定义
接口就是给出一些没有实现的方法, 封装到一起, 在某个类要使用的时候, 根据具体情况将这些方法实现出来
interface 接口名 {
//属性
//方法
}
class 类名 implements 接口 {
自己的属性;
自己的方法;
必须实现的接口的抽象方法
}
在Jdk7之前, 接口内的方法都是抽象方法, Jdk8之后, 接口可以有方法的具体实现, 但是需要使用default
修饰, 或者是static
方法
相关细节
- 接口不能被实例化
- 接口中所有的方法都是
public
方法, 且其抽象方法可以省略abstract
关键字 - 一个普通类实现接口必须要将其所有抽象方法都实现, 抽象类实现接口可以不用实现接口的方法
- 一个类可以实现多个接口
interface IA {
void hi();
}
interface IB {
void say();
}
class P implements IA, IB {
@Override
public void hi() {
}
@Override
public void say() {
}
}
- 接口中的属性只能是
final
, 而且是public static final
修饰符, 所以可以使用IA.n1
来访问属性
interface IA {
int n1 = 10; // 相当于public static final int n1 = 10;
void hi();
}
-
接口不能继承其他的类, 但是可以继承其他多个接口
-
接口的修饰符只能是
public
或者 默认
接口和继承的比较
interface SwimAble {
void swimming();
}
interface FlyAble {
void flying();
}
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
void say() {
System.out.println("人类说话");
}
}
class Student extends Person implements FlyAble, SwimAble {
public Student(String name) {
super(name);
}
@Override
public void swimming() {
System.out.println("通过学习, 学会游泳");
}
@Override
public void flying() {
System.out.println("通过学习, 学会飞翔");
}
}
通过例子可以看出, 当子类继承了父类, 就自动拥有了父类的功能, 但是如果子类需要扩展功能,
就可以通过实现接口的方式扩展
所以, 实现接口是对java单继承机制的一种补充和完善
接口比继承更加灵活, 在一定程度上实现了代码解耦
接口的多态
- 接口引用可以指向实现了接口的类的对象
interface A {}
class B implements A {}
class C implements A {}
public static void main(String[] args) {
A a = new B();
a = new C();
}
-
和继承一样, 可以使用
instanceof
来判断运行类型, 然后使用向下转型 -
多态转递
interface A {}
interface B extends A {}
class C implements B {}
public static void main(String[] args) {
A a = new C();
B b = new C();
}
也就是接口之间继承, 和类与接口之间的实现, 这两者之间存在传递关系
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)