- 接口用关键字interface表示
- 类实现接口用implements表示
- 格式:class 类名 implements 接口名 {}
- 接口不能实例化
- 那么,接口如何实例化呢?
- 按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态(下一节讲)。
- 接口的子类
- 可以是抽象类。但是意义不大。
- 可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
/** *
public class Interface_Java {
public static void main(String[] args) {
//AnimalTrain是抽象的; 无法实例化
//AnimalTrain at = new AnimalTrain();
//at.jump();
AnimalTrain at = new Cat();
at.jump();
}
}
//定义动物培训接口
interface AnimalTrain {
public abstract void jump();
}
//抽象类实现接口
abstract class Dog implements AnimalTrain {
}
//具体类实现接口
class Cat implements AnimalTrain {
public void jump() {
System.out.println("猫可以跳高了");
}
}
- 接口成员特点
- 成员变量;只能是常量,并且是静态的。
- 默认修饰符:public static final
- 建议:自己手动给出。
- 构造方法:接口没有构造方法。因为接口主要是扩展功能的,而没有具体存在
- 成员方法:只能是抽象方法。
- 默认修饰符:public abstract
- 建议:自己手动给出。
interface Inter {
public int num = 10;
public final int num2 = 20;
public static final int num3 = 30;
//错误: 需要<标识符>,接口没有构造方法
//public Inter() {}
//接口方法不能带有主体 //public void show() {}
//abstract void show();
//默认public public void show();
//默认abstract}
class InterImpl extends Object implements Inter {
public InterImpl() { super(); }
@Override
public void show() { }
}
public class InterfaceDemo {
public static void main(String[] args) {
//创建对象
Inter i = new InterImpl();
System.out.println(i.num);
System.out.println(i.num2);
//i.num = 100;
//i.num2 = 200;
//System.out.println(i.num); //无法为最终变量num分配值
//System.out.println(i.num2);//无法为最终变量num2分配值
System.out.println(Inter.num);
System.out.println(Inter.num2);
}
}