定义
修饰符 interface 接口名称 {
}
-
接口是一个抽象类型,无法被实例化。
-
接口中定义的变量是针对所有类,默认是static
public interface InterfaceDemo { // 定义方法
void run();
public abstract void run(); // 等价。 public abstract 为默认修饰
}
public interface InterfaceDemo { // 定义变量
/** static变量属于类本身,变量只有一个,final修饰之后属于常量。
* 常量一般修饰符:public static final (可以省去不写,默认会加上)
* 常量的变量名称建议字母全部大写,多个单词用"_"连接
*/
public static final String SCHOOL_NAME = "Bill";
String SCHOOL_NAME = "Bill"; // 等价
// static变量属于类本身,变量只有一个,但是变量值可以修改。不属于常量。
public static String name; //报错
}
接口是隐式抽象,声明时无需使用abstract。
多继承多实现
interface CC
{
void show();
}
interface MM
{
void method();
}
interface QQ extends CC,MM//接口与接口之间是继承关系,而且接口可以多继承。
{
void function();
}
class WW implements QQ
{
//覆盖3个方法。
public void show(){}
public void method(){}
public void function(){}
}
-
一个接口可以继承多个接口,一个类可以实现多个接口。
-
实现类必须重写接口中的方法。
interface vs abstract
抽象类 | 接口 | |
---|---|---|
关键字 | extends | implements |
实现数量 | 单继承 | 多实现 |
构造函数 | 可以拥有 | 无法拥有 |
修饰符 | 类中的方法有任意修饰符 | 接口中的方法默认修饰符为public |
实例化接口类
实现接口类可以实例化的充分条件:抽象方法全部实现。
interface AbsDemo
{
public static final int NUM = 4;
public void show1();
public void show2();
}
class DemoImpl01 implements AbsDemo // 实现接口 AbsDemo
{
public void show1() {}
public void show2() {}
}
abstract class DemoImpl02 implements AbsDemo // 实现接口 AbsDemo
{
public void show1() {}
}
DemoImpl01实现了全部抽象方法,因此DemoImpl01可以实例化。
DemoImpl02实现了部分抽象方法,因此DemoImpl02不可以实例化。
新老接口兼容
//老接口
void oldService(A,B);{
//兼容新接口,传个null代替C
newService(A,B,null);
}
//新接口,暂时不能删掉老接口,需要做兼容。
void newService(A,B,C);
New parameter in new interfaces, the corresponding parameter can be set as null in old interfaces.
Once upgrade interfaces, the old interfaces may fail to work due to the compatibility. More seriously, this can lead to system's crush.
接口定义常量
public static final
是灰色的,说明是默认的,可以省略不写。
将public换成private,编译器会直接报错。
public interface Attribute {
private String mouth = "mouth";
}
报错:Modifier 'private' not allowed here
interface是定义给别人使用的,因此定义成private是没有意义的。