接口

接口基本概念

如果一个类之中只是由抽象方法和全局常量所组成,这种情况不会定义为抽象类,而是定义为接口,所谓接口就属于特殊抽象类,这个类只有抽象方法和全局常量,连构造方法都没有。

接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。

接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)

一个抽象类可以去继承一个抽象类,一个接口可以通过extends关键字继承多个接口,但是接口不能继承抽象类

  1. interface A {//定义接口
  2. public static final String name = "HELLO";//全局常量
  3. public abstract void fun();//抽象方法
  4. }
  • 接口必须要有子类,但是一个子类可以使用implements关键字实现多个接口
  • 接口的子类(如果不是抽象类), 必须覆写接口中的全部抽象方法
  • 接口的对象可以利用子类对象的向上转型进行实例化操作。

实现多个接口案例

实现多接口,必须覆写实现的接口的全部抽象方法

  1. interface A {//定义接口
  2. public static final String name = "HELLO";//全局常量
  3. public abstract void fun();//抽象方法
  4. }
  5. interface B {//定义接口
  6. public abstract void get();//抽象方法
  7. }
  8. //实现多个接口
  9. class C implements A,B{
  10. public void fun(){
  11. System.out.println("实现的A接口fun方法");
  12. }
  13. public void get(){
  14. System.out.println("实现的B接口get方法");
  15. }
  16. }
  17. public class TestDemo{
  18. public static void main(String[] args){
  19. C c = new C();//实例子类对象
  20. A a = c;//向上转型
  21. B b = c;//向上转型
  22. a.fun();
  23. b.get();
  24. //结果
  25. //实现的A接口fun方法
  26. //实现的B接口get方法
  27. }
  28. }

接口多继承

  1. interface A {//定义接口
  2. public static final String name = "HELLO";//全局常量
  3. public abstract void getA();//抽象方法
  4. }
  5. interface B {//定义接口
  6. public abstract void getB();//抽象方法
  7. }
  8. //继承多个接口
  9. interface C extends A,B{
  10. public abstract void getC();//抽象方法
  11. }
  12. //实现多个接口
  13. class D implements C{
  14. public void getA(){
  15. System.out.println("实现的A接口");
  16. }
  17. public void getB(){
  18. System.out.println("实现的B接口");
  19. }
  20. public void getC(){
  21. System.out.println("实现的C接口");
  22. }
  23. }

一个抽象类只能够继承一个抽象类,但是接口没有限制,一个子类可以继承一个抽象方法,但是却可以实现多个接口 ,在Java中接口解决了单继承的问题

接口中使用static关键字申明的接口为外部接口

如类中使用static关键字申明的类为外部类,接口中使用static关键字申明的接口为外部接口

如下: A.B属于继承内部接口

  1. interface A {
  2. public void funA();
  3. static interface B{
  4. public void funB();
  5. }
  6. }
  7. class C implements A.B{//C 实现B接口
  8. public void funB(){
  9. System.out.println("hello");
  10. }
  11. }

总结

  • 接口定义了不同层直接的操作标准
  • 接口表示了一种操作能力
  • 接口表示将服务带那个的远程方法试图暴露给客户端