接口
接口基本概念
如果一个类之中只是由抽象方法和全局常量所组成,这种情况不会定义为抽象类,而是定义为接口,所谓接口就属于特殊抽象类,这个类只有抽象方法和全局常量,连构造方法都没有。
接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)
一个抽象类可以去继承一个抽象类,一个接口可以通过extends关键字继承多个接口,但是接口不能继承抽象类
interface A {//定义接口
public static final String name = "HELLO";//全局常量
public abstract void fun();//抽象方法
}
- 接口必须要有子类,但是一个子类可以使用implements关键字实现多个接口。
- 接口的子类(如果不是抽象类), 必须覆写接口中的全部抽象方法
- 接口的对象可以利用子类对象的向上转型进行实例化操作。
实现多个接口案例
实现多接口,必须覆写实现的接口的全部抽象方法
interface A {//定义接口
public static final String name = "HELLO";//全局常量
public abstract void fun();//抽象方法
}
interface B {//定义接口
public abstract void get();//抽象方法
}
//实现多个接口
class C implements A,B{
public void fun(){
System.out.println("实现的A接口fun方法");
}
public void get(){
System.out.println("实现的B接口get方法");
}
}
public class TestDemo{
public static void main(String[] args){
C c = new C();//实例子类对象
A a = c;//向上转型
B b = c;//向上转型
a.fun();
b.get();
//结果
//实现的A接口fun方法
//实现的B接口get方法
}
}
接口多继承
interface A {//定义接口
public static final String name = "HELLO";//全局常量
public abstract void getA();//抽象方法
}
interface B {//定义接口
public abstract void getB();//抽象方法
}
//继承多个接口
interface C extends A,B{
public abstract void getC();//抽象方法
}
//实现多个接口
class D implements C{
public void getA(){
System.out.println("实现的A接口");
}
public void getB(){
System.out.println("实现的B接口");
}
public void getC(){
System.out.println("实现的C接口");
}
}
一个抽象类只能够继承一个抽象类,但是接口没有限制,一个子类可以继承一个抽象方法,但是却可以实现多个接口 ,在Java中接口解决了单继承的问题
接口中使用static关键字申明的接口为外部接口
如类中使用static关键字申明的类为外部类,接口中使用static关键字申明的接口为外部接口
如下: A.B属于继承内部接口
interface A {
public void funA();
static interface B{
public void funB();
}
}
class C implements A.B{//C 实现B接口
public void funB(){
System.out.println("hello");
}
}
总结
- 接口定义了不同层直接的操作标准
- 接口表示了一种操作能力
- 接口表示将服务带那个的远程方法试图暴露给客户端