/**
* 接口
*
* 定义:
* 成员方法全是抽象的
* 不能定义带有方法体的方法
*
* 接口中定义抽象方法是有固定格式的
* public abstract 返回值类型 方法名(参数列表)
* 前面的 public abstract是固定的
* 后面的 是不固定的
*
* 接口中成员变量的定义要求
* 必须定义为常量
* public static final 数据类型 变量名 = 值
*
* 类和类之间叫继承 extends
* 类和接口之间叫实现 implements
*
* 子类 和 实现类, 注意他们的叫法的不同
*
*
* 接口中成员的特点
* 1. 成员变量的特点:
* 没有变量, 都是常量
* 固定格式: public static final 数据类型 变量名 = 值
* public 公共, 权限
* static 静态, 可以被类名.xxx直接调用
* final 最终, 固定住变量的值, 不能修改
* 注意: public static final 修饰符, 在接口的定义中, 可以省略不写, 也可以选择性的写, 即使不写, 默认也是这些修饰符
*
* 2. 成员方法的特点:
* public abstract 返回值类型 方法名(参数列表);
* 修饰符 public abstract 可以不写, 也可以选择性的写, 默认就是这些修饰符
*
* 3. 实现类, 实现接口, 重写接口的全部抽象方法, 才能创建实现类对象
* 实现类只重写了一部分抽象方法的话, 该实现类还是一个抽象类
*
*
* 类可以继承一个类且实现多个接口 (单继承多实现)
*
* 接口和接口之间, 是继承关系
* java支持接口之间的多继承, 一个接口可以同时继承多个接口
*/
public static final String str = "hello java";
public abstract String getString(参数列表);
在 Java 中,被关键字 interface 修饰的 ”类“ 是接口
接口的定义如下:
interface 接口名称 {
全局常量;
抽象方法;
}
public interface Move {
void move();
}
public class Animal implements Move {
public void move() {
System.out.println("Animal move");
}
}
public class Human implements Move {
public void move() {
System.out.println("Human move");
}
}
public class Car implements Move {
public void move() {
System.out.println("Car move");
}
}
public class Test {
public static void main(String[] args) {
Move[] move = {new Animal(), new Human(), new Car()};
for (Move m: move) {
m.move();
}
}
}
// 执行结果
// Animal move
// Human move
// Car move
在这单上,相比于抽象类,Java 对接口的限制更加严格,因为接口连构造方法都没有,所以根本不可能实例化对象
public interface Move {
// 此时编译器会提示 Interfaces cannot have constructors 错误信息
public Move() {}
void move();
}
由于 Java 中允许多实现,所以,一个类在实现了多个接口之后,就可以上转型为多个接口,即打破单继承局限。