/**
 * 接口
 *
 * 定义:
 *     成员方法全是抽象的
 *     不能定义带有方法体的方法
 *
 * 接口中定义抽象方法是有固定格式的
 *     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(参数列表);

1. 接口的基本概念

在 Java 中,被关键字 interface 修饰的 ”类“ 是接口

接口的定义如下:

interface 接口名称 {
    全局常量;
    抽象方法;
}

2. 接口的使用

2.1 创建接口

public interface Move {
		void move();
}

2.2 实现接口的实现类,用实现类实例化对象

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

3. 接口存在的意义

3.1 禁止直接为其实例化对象

在这单上,相比于抽象类,Java 对接口的限制更加严格,因为接口连构造方法都没有,所以根本不可能实例化对象

public interface Move {
		// 此时编译器会提示 Interfaces cannot have constructors 错误信息
		public Move() {}
		void move();
}

3.2 打破单继承局限(实现伪多重继承)

由于 Java 中允许多实现,所以,一个类在实现了多个接口之后,就可以上转型为多个接口,即打破单继承局限。