定义:抽象类与普通类相比最大的特点是约定了子类的实现要求,但是抽象类存在单继承局限。如果要约定子类的实现要 求并避免单继承局限就需要使用接口。
接口就是抽象类和全局常量的集合
1. 在JDK1.8之后允许接口中有静态方法和默认方法:public default / static 返回值类型 方法名称(参数列表){ 方法体 },通过类名.方法名调用
2. 在JDk1.9之后允许接口中定义私有方法,private 返回值类型 方法名称(参数列表){ 方法体 }
3. 接口中不能有静态块和构造方法
- 接口中只允许public权限。(不管是属性还是方法,其权限都是public),interface定义的方法默认就是 public,可以不写public
- 接口成员只能包含抽象方法和静态常量字段;定义的成员变量就是静态常量字段默认就是public static final ,成员方法就是抽象方法,修饰符是public abstract
- 真正new的子类才有意义,别被前面的类名称搞晕
- 对于接口的子类(不是抽象类)必须覆写接口中的全部抽象方法。随后可以利用子类的向上转型通过实例化子类来得到接口的实例化对象。
interface IMessage {
//全局常量
public static final String M = "i am interface";
//抽象方法
public abstract void IMethod();
}
interface INews {
//抽象方法
public abstract String IGetNews();
}
class Impl implements IMessage, INews {
@Override
public void IMethod() {
System.out.println(IMessage.M);
}
@Override
public String IGetNews() {
return IMessage.M;
}
}
public class InterfaceClass {
public static void main(String[] args) {
IMessage iMessage = new Impl();//子类向上转型,为父接口实例化对象
iMessage.IMethod();
INews iNews = (INews) iMessage;
System.out.println( iNews.IGetNews());
}
}
- 当一个子类既需要实现接口又需要继承抽象类时,请先使用extends继承一个抽象类,而后使用implements 实现多个接口
- 接口只能继承接口 ,并且可以多继承。一个接口可以使用extends继承多个父接口,但是接口不能继承类,包括抽象类。
- 一个抽象类(类)可以使用implements实现多个接口,接口的方法抽象类选择实现,抽象类不实现的话就由继承的子类来进行实现 ,继承接口的任何非抽象类型必须实现接口的所有成员,从而重写这些抽象成员,若未实现所有抽象成员,则必须声明为抽象类,这就与抽象类相联系了
- 接口类似于抽象基类,接口不能实例化, 本身不提供他所定义的成员的实现,只指定实现该接口的类必须提供的成员
注:阿里编码规约:接口中的方法和属性不要加任何修饰符号,static final、public abstract不要加,保持代码的简洁性。