接口
接口基本概念
如果一个类之中只是由抽象方法和全局常量所组成,这种情况不会定义为抽象类,而是定义为接口,所谓接口就属于特殊抽象类,这个类只有抽象方法和全局常量,连构造方法都没有。
接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 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");}}
总结
- 接口定义了不同层直接的操作标准
- 接口表示了一种操作能力
- 接口表示将服务带那个的远程方法试图暴露给客户端