Preface:
接口:
在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法
接口特性、与抽象类:
接口特性:(接口比抽象类更抽象,但具有抽象类的性质)
接口不可以被实例化(常作为类型使用)
实现类必须实现接口的所有方法
实现类可以实现多个接口(Java中的多继承)
implements、多个接口使用逗号隔开
E extends D implements A,B,C
接口中的变量都是静态常量(public static final),必须显式初始化
提供某种功能,但不具体实现(必须抽象)
接口中的方法
默认都是public abstract 的
除了成员变量和方法,不能包含其他
接口没有构造方法,不能被实例化
一个接口不能实现另一个接口,但可以继承多个其他接口
一个类必须实现接口抽象方法(implements)除非这个类也是抽象的
接口是一种能力
体现在接口的方法上
可能多个能力,也可能不同类同样能力
Example:
两种门及它们的开关、上锁开锁功能实现:
package door;
public abstract class Door {//门的通用功能
public abstract void open();
public abstract void close();
}
package door;
public interface Lock {//锁为一个接口(reason?)
public void locked();
public void unlocked();
}
package door;
public class Normal extends Door{//child class:普通门
@Override
public void open(){
System.out.println("The door is opened");
}
@Override
public void close(){
System.out.println("The door is closed");
}
}
package door;
public class Security extends Door{//child class:防盗门
public void open(){
System.out.println("The door is opened");
}
public void close(){
System.out.println("The door is closed");
}
public void locked(){
System.out.println("Turned closewise three times,locked");
}
public void unlocked(){
System.out.println("Turned anticlosewise three times,unlocked");
}
}
package door;
public class TestDoor {//测试
public static void main(String[] args){
System.out.println("Normal:");
Door door=new Normal();
door.open();
door.close();
System.out.println("Security:");
Security sec=new Security();
sec.close();
sec.locked();
sec.unlocked();
sec.open();
}
}
总结:
接口与类相似点:
- 一个接口可以有多个方法
- 接口文件保存在.java结尾的文件中,文件名使用接口名
- 接口的字节码文件保存在.class结尾的文件中
- 接口相应的字节码文件必须在与包名称相匹配的目录结构中
接口与类的区别:
- 接口不能用于实例化对象
- 接口没有构造方法
- 接口中所有的方法必须是抽象方法
- 接口不能包含成员变量,除了static和final变量
- 接口不是被类继承了,而是要被类实现
- 接口支持多重继承
引用:
[1] haiguiking 创建.Java 接口[OL],youj 最后一次修改 2015-09-20,https://www.w3cschool.cn/java/java-interfaces.html