接口:
接口提供一种约定,使得实现接口的类在形式上保持一致
声明:
public interface 接口名{
接口成员
}
成员变量声明默认public static fianl
成员方法声明默认public abstract
注意:
使用implements关键字
一个类可以同时实现多个接口
必须重写接口中的所有抽象方法,即使不用也必须实现
接口的实现类包含普通方法
在实现抽象方法时,使用public,因为接口中默认public,不写时,会默认package-access,访问权限变小,编译错误
类只能有一个直接父类,但可以实现多个接口,一个类若要实现某个接口,必须重写接口中的所有方法,或者定义为抽象类,若在继承一个类的同时又实现了多个接口,extends必须位于implements之前
新特性:
jdk8:
default可以在接口中修饰方法,修饰的方法可以有具体实现,也只能在接口中实现,修饰的方法可以被重写
static修饰的方法,使用接口名.方法名调用,不能被继承,但可以隐藏
jdk9:
private修饰方法,只能在本类中使用
抽象类与接口的区别:
区别 | 抽象类 | 接口 |
---|---|---|
多继承 | 子类只能继承一个直接抽象类 | 接口可以继承多个接口 |
实现 | 子类使用extends关键字继承抽象类 | 子类使用implements关键字实现多个接口 |
成员 | 抽象类中有实例成员,静态成员,抽象方法,成员方法中不能使用default关键字 | 接口中只能有常量,抽象方法 jdk8:static default jdk9:private |
成员变量修饰符 | 可以定义变量,也可以定义常量 | 只能定义常量public static final |
子类实现 | 子类的访问权限与父类相同或扩大 | 子类的访问权限必须是public |
构造函数 | 可以有构造函数 | 不能定义构造函数 |
最高层 | 类的最高层是Object | 接口没有最高层 |
相同点 | 都不能实例化,都是引用数据类型,都含有抽象方法 |