Java之接口(Interface)用法及说明
Java 接口(Interface)
接口的本质: 接口是一种比抽象类更“纯粹”的抽象类型。它就像是一份 “通用契约” 或 “行为标准” ,只规定“能做什么”,而不关心“具体怎么做”。
接口的核心作用
- 约束与规范:定义一套标准,强制要求实现类必须遵守。
- 扩展能力:弥补了 Java 类“单继承”的局限,让一个类可以实现多个接口,从而具备多种能力。
- 解耦:将“使用者”和“实现者”分离。面向接口编程,依赖的是抽象的契约,而不是具体的实现类,这大大提高了代码的灵活性和可维护性。
接口的定义与成员规则
- 抽象方法:接口中的普通方法默认都是
public abstract修饰的(即使省略不写,编译器也会自动加上)。(注:从 Java 8 开始,接口中允许定义带有方法体的default和static方法。) - 全局常量:接口中定义的属性(变量)默认都是
public static final修饰的,即全局静态常量。必须在声明时赋值,且不可修改。 - 无构造方法:接口不能被实例化(不能
new接口),因此接口中没有构造方法。
接口的实现(Implements)
- 多实现机制:一个类可以通过
implements关键字来实现一个或多个接口(多个接口用逗号隔开)。 - 强制重写:如果一个普通类实现了接口,就必须重写接口中所有的抽象方法。如果该类没有重写所有抽象方法,则这个类必须被声明为抽象类。
- 访问权限:接口中的方法默认是
public的,实现类在重写时,访问权限不能低于接口的权限,所以必须显式声明为public。
接口与继承的关系
- 类与类:只能是单继承(
extends)。 - 类与接口:可以多实现(
implements)。 - 接口与接口:接口之间支持多继承(一个接口可以
extends多个父接口)。
代码示例:多实现与不可实例化
接口就像一份“行为说明书”,类实现了接口就必须照着做。同时,接口本身是抽象的,无法直接创建对象。
// 定义两个接口:代表两种不同的能力
interface Flyable {
void fly();
}
interface Swimmable {
void swim();
}
// 一个类可以实现多个接口(多实现),同时具备飞行和游泳的能力
class Duck implements Flyable, Swimmable {
@Override
public void fly() {
System.out.println("鸭子在天上飞");
}
@Override
public void swim() {
System.out.println("鸭子在水里游");
}
}
public class Test {
public static void main(String[] args) {
// 接口不能被实例化!以下代码会报错:
// Flyable f = new Flyable(); 编译错误
// 正确的做法是:创建实现类的对象
Duck duck = new Duck();
duck.fly();
duck.swim();
}
}
生活案例:USB 接口
接口在现实生活中的完美体现就是电脑的 USB 接口。
电脑主板(系统)定义好了 USB 接口的规范(能传输数据、能供电),它不需要知道具体插上来的是什么设备。
- 鼠标实现了 USB 接口,插上就能控制光标。
- 键盘实现了 USB 接口,插上就能输入文字。
- U盘实现了 USB 接口,插上就能读写文件。
不管是鼠标、键盘还是U盘,只要它们符合 USB 接口的规范(实现了接口),电脑就能识别并使用它们。这就是接口“约束”与“多态”的完美体现,也极大地降低了设备与电脑之间的耦合度。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java实战之用springboot+netty实现简单的一对一聊天
这篇文章主要介绍了Java实战之用springboot+netty实现简单的一对一聊天,文中有非常详细的代码示例,对正在学习Java的小伙伴们有非常好的帮助,需要的朋友可以参考下2021-04-04
Springboot集成MongoDB无认证与开启认证的配置方式
本文主要介绍了Springboot集成MongoDB无认证与开启认证的配置方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-03-03
解决创建springboot后启动报错:Failed to bind properties under‘spri
在Spring Boot项目中,application.properties和application.yml是用于配置参数的两种文件格式,properties格式简洁但不支持层次结构,而yml格式支持层次性,可读性更好,在yml文件中,要注意细节,比如冒号后面需要空格2024-10-10
idea中maven使用tomcat7插件运行run报错Could not start T
这篇文章主要介绍了idea中maven使用tomcat7插件运行run报错Could not start Tomcat问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-09-09


最新评论