接口类似于类,但接口的成员没有执行体,它只是方法、属性、事件和索引符的组合而已。接口不能被实例化,接口没有构造方法,没有字段。在应用程序中,接口就是一种规范,它封装了可以被多个类继承的公共部分。
## 1、定义接口
Java 接口的定义方式与类基本相同,不过接口定义使用的关键字是 interface,接口定义由接口声明和接口体两部分组成。语法格式如下:
```
[public] interface 接口名 [extends 接口1, [接口2, ...]] {
// 声明常量
[public] [static] [final] 数据类型 常量名 = 常量值;
// 声明方法
[public] [abstract] 返回值类型 方法名称(参数列表);
}
```
> 提示:如果接口本身被定义为 public,则所有的方法和常量都是 public 型的。
## 2、接口成员——抽象方法和常量
接口对于其声明、变量和方法都做了许多限制,如下:
* 具有 public 访问控制符的接口,允许任何类使用;没有指定 public 的接口,其访问将局限于所属的包。
* 方法的声明不需要其他修饰符,在接口中声明的方法,将隐式地声明为公有的(public)和抽象的(abstract)。
* 在 Java 接口中声明的变量其实都是常量,接口中的变量声明,将隐式地声明为 public、static 和 final,即常量,所以接口中定义的变量必须初始化。
* 接口没有构造方法,不能被实例化。
* 一个接口不能够实现另一个接口,但它可以继承多个其他接口。子接口可以对父接口的方法和常量进行重写。
```
public interface MyInterface {
String name; // 不合法,变量name必须初始化
int age = 20; // 合法,等同于 public static final int age = 20;
void getInfo(); // 方法声明,等同于 public abstract void getInfo();
}
```
【选择】阅读下面的 Java 代码,能够填写在(1)处的语句是()(选择一项)
```
public interface ILog {
//(1)
}
```
```
A private int MAX_LOG_SIZE = 1000;
B public void printLog() { System.out.println("print the log"); }
C private boolean saveToFile(String fileName);
D int getSize();
```
【选择】下列关于 Java 中接口的说法不正确的是()(选择一项)
```
A 接口中方法的访问修饰符默认为 public
B 接口中的方法如果写成 void test(); 的形式,默认是抽象方法
C 实现接口的类中在重写接口中方法时访问修饰符可以为 protected
D 当类实现接口时,需要实现接口中所有的抽象方法,否则需要将该类设置为抽象类
```
【选择】运行下列代码时,哪个位置会发生编译报错()(选择一项)
```
interface A { // (1)
public static final int TEMP; // (2)
public abstract void info(); // (3)
}
```
```
A 位置一 B 位置二 C 位置三 D 不存在错误
```
## 3、接口成员——默认方法和静态方法
默认方法可以通过实现接口的类实例化的对象来调用。需要注意的是,此处的静态方法只能被`public`修饰(或者省略不写),不能是`private`或者`protected`。
```
public interface MyInterface {
// 默认方法
default void hello () {
System.out.println("say hello");
}
// 静态方法
static void world() {
System.out.println("say world");
}
}
public class Test implements MyInterface {
public static void main(String[] args) {
Test test = new Test();
test.hello(); // 调用默认方法
MyInterface.world(); // 调用静态方法
}
}
```
【选择】在实现类中划线处加入下列哪条代码可以调用 IAa 接口中默认的方法()(选择一项)
```
public interface IAa {
default void show() {
System.out.println("我是默认方法");
}
}
public class B implements IAa {
public void show() {
_______________
System.out.println("重写默认方法");
}
}
```
```
A IAa.show();
B super.show();
C IAa.super.show();
D B.super.show();
```
【选择】下列代码的运行结果是()(选择一项)
```
public interface IA {
int TEMP = 10;
}
public interface IB extends IA {
String TEMP = "temp";
}
public class Test implement IA, IB {
public static void main(String[] args) {
IA a = new Test();
IB b = new Test();
System.out.print(a.TEMP);
System.out.println(b.TEMP);
}
}
```
## 4、接口的实现
接口被定义后,一个或者多个类都可以实现该接口,这需要在实现接口的类的定义中包含 implements 子句,然后实现由接口定义的方法。实现接口的一般形式如下:
```
<public> class <类名> [extends 父类] [implements 接口1 [, 接口2...]] {
// ...
}
```
如果一个类实现多个接口,这些接口需要使用逗号分隔。实现接口的方法必须声明为 public,而且实现方法的类型必须严格与接口定义中指定的类型相匹配。
【编程】使用接口的知识,定义接口 IFLY,创建三个类 Plane 类、Bird 类、Balloon 类,分别重写接口中的 fly() 方法,然后再测试类中进行调用。程序运行参考效果如图所示:
```
飞机在天上飞
小鸟在天空翱翔
气球飞上天空
```
```
public class Test {
public static void main(String[] args) {
// 1. 对象实例化
// 2. 分别调用 fly() 方法
}
}
public interface IFly {
// 创建方法 fly()
}
// 实现接口 IFly
public class Plane {
// 重写 fly 方法
}
// 实现接口 IFly
public class Bird {
// 重写 fly 方法
}
// 实现接口 IFly
public class Balloon {
// 重写 fly 方法
}
```
- 阶段一 Java 零基础入门
- 步骤1:基础语法
- 第01课 初识
- 第02课 常量与变量
- 第03课 运算符
- 第04课 选择结构
- 第05课 循环结构
- 第06课 一维数组
- 第08课 方法
- 第09课 数组移位与统计
- 第10课 基础语法测试
- 第09课 基础语法测试(含答案)
- 步骤2:面向对象
- 第01课 类和对象
- 第02课 封装
- 第03课 学生信息管理
- 第04课 继承
- 第05课 单例模式
- 第06课 多态
- 第07课 抽象类
- 第08课 接口
- 第09课 内部类
- 第10课 面向对象测试
- 第10课 面向对象测试(含答案)
- 步骤3:常用工具类
- 第01课 异常
- 第02课 包装类
- 第03课 字符串
- 第04课 集合
- 第05课 集合排序
- 第06课 泛型
- 第07课 多线程
- 第08课 输入输出流
- 第09课 案例:播放器
- 第10课 常用工具测试(一)
- 第10课 常用工具测试(一)(答案)
- 第10课 常用工具测试(二)
- 第10课 常用工具测试(二)(答案)
- 阶段二 从网页搭建入门 JavaWeb
- 步骤1:HTML 与 CSS
- 第01课 HTML 入门
- 第01课 HTML 入门(作业)
- 第02课 CSS 入门
- 第02课 CSS 入门(作业)
- 第03课 CSS 布局
- 第03课 CSS 布局(作业)
- 步骤2:JavaScript 与前端案例
- 第01课 JavaScript 入门
- 第01课 JavaScript 入门(作业)
- 第02课 仿计算器
- 第03课 前端油画商城案例
- 第04课 轮播图
- 第05课 网页搭建测试
- 第05课 网页搭建测试(含答案)
- 步骤3:JavaScript 教程
- 入门
- 概述
- 基本语法
- 数据类型
- 概述
- 数值
- 字符串
- undefined, null 和布尔值
- 对象
- 函数
- 数组
- 运算符
- 算术运算符
- 比较运算符
- 布尔运算符
- 位运算符
- 运算顺序
- 语法专题
- 数据类型的转换
- 错误处理机制
- 标准库
- String
- Date
- Math
- DOM
- 概述
- Document 节点
- 事件
- EventTarget 接口
- 事件模型
- 常见事件
- 阶段三 数据库开发与实战
- 步骤1:初始数据库操作
- 第01课 数据类型
- 第02课 表的管理
- 第03课 数据管理
- 第04课 常用函数
- 第05课 JDBC 入门
- 第06课 Java 反射
- 第07课 油画商城
- 第08课 数据库基础测试
- 步骤2:MyBatis 从入门到进阶
- 第01课 IntelliJ IDEA 开发工具入门
- 第02课 Maven 入门
- 第03课 工厂模式
- 第04课 MyBatis 入门
- 第05课 MyBatis 进阶
- 第06课 商品信息管理
- 第07课 MyBatis 基础测试
- 步骤3:Redis 数据库与 Linux 下项目部署
- 第01课 Linux 基础
- 第02课 Linux 下 JDK 环境搭建及项目部署
- 第03课 Redis 入门
- 阶段四 SSM 到 Spring Boot 入门与综合实战
- 步骤1:Spring 从入门到进阶
- 第01课 Spring 入门
- 第02课 Spring Bean 管理
- 第03课 Spring AOP
- 第04课 基于 AspectJ 的 AOP 开发
- 第05课 JDBC Template
- 第06课 Spring 事务管理
- 第07课 人员管理系统开发
- 第08课 Spring 从入门到进阶测试
- 步骤2:Spring MVC 入门与 SSM 整合开发
- 第01课 Spring MVC 入门与数据绑定
- 第02课 Restful 风格的应用
- 第03课 SpringMVC 拦截器
- 第04课 办公系统核心模块
- 步骤3:Spring Boot 实战
- 第01课 Spring Boot 入门
- 第02课 校园商铺项目准备
- 第03课 校园商铺店铺管理
- 第04课 校园商铺商品管理及前台展示
- 第05课 校园商铺框架大换血
- 步骤4:Java 面试
- 第01课 面试准备
- 第02课 基础面试技巧
- 第03课 Web基础与数据处理
- 第04课 主流框架