接口 Interface
类的规范:只规定应含有哪些方法,而不负责具体实现。
代码语言:javascript复制public interface Move{
// abstract 方法
public void go(String loc);
// default 方法
default void stop() {
System.out.print("stop");
};
}Copy to clipboardErrorCopied
- 声明接口:必须且默认为 static final,通常为 public 。
- 只允许声明静态常量:必须且默认为 public static final 。
- 声明抽象方法:必须且默认为 abstract ,可以为 static。
JDK 1.8 以前,接口中抽象方法必须且默认为 public,不允许实现任何方法。 JDK 1.8 以后,接口中抽象方法可以且默认为 default,且允许实现 static 和 default 方法。 JDK 1.9 以后,接口中抽象方法可以是 private。*
抽象声明
- abstract 方法:只有声明,而没有方法的具体实现。
- abstract 类:类的模板,不能实例化对象。必须由其他类继承才能使用。
public abstract class Vehicle {
// 声明变量
String brand;
// 声明并实现方法
public void go(String loc){
System.out.print("go to" loc);
}
}Copy to clipboardErrorCopied
接口和抽象类的区别
- 接口不能实现普通方法,抽象类可以实现具体的方法、也可以不实现。
- 接口只能定义静态常量,抽象类可以定义非静态变量。
- 一个实体类可以实现多个接口,但只能继承一个抽象类。
更新声明
- default 方法:更新接口时添加的新方法,允许旧类实现接口而不实现该方法。
- 可以直接在接口内实现,供没有定义的旧类直接使用。若类中实现了该方法则覆盖。
- 如果类实现了多个接口且拥有同名 default 方法:
- 两个接口若存在继承关系,调用时优先使用子类方法。
- 否则,必须重写子类 default 方法,通过 super 关键字明确实现哪个接口:
class Plane implements Move, Fly{
...
void go(){
Fly.super.go(); // 实现选定 default 方法
}
}Copy to clipboardErrorCopied
包 Package
命名空间,表示 java 文件的存储路径。其路径记录在每个 java 文件首。
代码语言:javascript复制package com.company.project.module; // 声明存储路径Copy to clipboardErrorCopied
导入 import
在 java 文件中,如果要调用其他 java 文件中定义的类 / 接口,就需要进行导入:
- 同一存储路径(包)下的 java 文件不需要导入,可以直接调用。
- 已默认导入 java.lang 路径下所有 java 文件,包含 System、String、Object、Math 等常用类。
- 如果没有导入对应 java 文件,或者导入了多个同名 java 文件,在调用类 / 接口时需要标明路径。
package com.company.project.module;
import java.util.Scanner; // 导入 java 文件,但不包括内部 static 变量和方法
import java.net.*; // 导入路径下所有 java 文件,但不包括下属文件夹
import static java.lang.Math.PI; // 导入 java 文件中的 static 变量或方法
public class Test{
public void main(String[] args){
java.io.InputStream in = new java.io.InputStream(System.in); // 未导入类,调用时需要标明路径
Scanner sc = new Scanner(in); // 已导入类,可直接调用
Integer n = sc.nextInt(); // 默认导入类,可直接调用
sc.close();
}
}