Java中没有多继承,但却可以实现多接口。
基本概念
- 接口使用interface关键字
- 接口命名前加字母I来区分接口和普通类
- 子类可以实现多个接口使用关键字implements
- 一般使用接口名+Impl来命名子类
- 一般一个类既可以当抽象类也可以当接口的时候,优先使用接口
- 子类的实例化对象可以向上转型为任意接口类型
接口使用权限
接口中只有public权限
- 接口中定义的变量,实际就是全局常量,默认public static final
- 接口中定义的方法默认为public abstract
子类可以先使用extends继承一个抽象类,后使用implements实现多个接口。
抽象类可以使用implements实现多个接口,但是接口不能extends抽象类。
抽象类实现接口可以选择性的覆写接口中的抽象方法。
一个接口可以使用extends继承多个父接口。接口不能继承类。
接口定义加强
接口只是方法的声明,没有方法的实现。一旦接口中添加新的抽象方法时,所有的实现类都需要覆写该方法。所以在JDK1.8后进行了改进。
使用default定义普通方法
interface Message{
void chat();
default void transportFile(){
System.out.println("暂不支持");
}
}
class QQMessage implements Message {
@Override
public void chat() {
System.out.println("QQ聊天");
}
@Override
public void transportFile() {
System.out.println("QQ传文件");
}
}
class MSNMessage implements Message {
@Override
public void chat() {
System.out.println("MSN聊天");
}
}
public class Hello {
public static void main(String[] args) {
Message qq=new QQMessage(); //向上转型
qq.chat();
qq.transportFile();
Message msn=new MSNMessage(); //向上转型
msn.chat();
msn.transportFile();
}
}
定义staic静态方法
interface Message{
void chat();
static void transportFile(){
System.out.println("暂不支持");
}
}
public class Hello {
public static void main(String[] args) {
//Message.chat();即使接口里有没有实现的方法也可以通过类名直接调用
Message.transportFile();
}
}