Java-接口

  • 接口不是类,而是对希望满足这个接口的类的一组需求

  • 接口中的所有方法都默认是public方法,接口中的字段总是默认是public static final,接口中不会实现方法,不会有实例字段,可以定义常量

    pulic interface Abc {
      double SIZE = 100 ;  //字段,常量
      void getSize();  //方法
    }
    
  • 不能构造接口对象,但是能声明接口变量,并且接口变量必须引用实现了这个类的接口对象

    //实现类
    public clss B implements Abc {
      ...
      public void getSize(){
          ...
      }
    }
    
    new Abc();  //error
    ABc abc = new B();  //ok
    
  • 接口默认方法,需要实现

    public interface Abc {
      default int getZero {
          return 0;
      }
    }
    
    • 当接口中有一个默认方法getSize,而在超类中也有一个方法叫getSize,或者另一个接口中也有一个方法getSize,那么将会产生二义性
    • 解决二义性的办法
      • 超类优先,即忽略接口中的方法
      • 当接口与接口产生冲突时,需要在实现类中重写这个方法
  • 接口参数

    • 某些泛型接口可以为其提供一个参数,我们知道所有的类都继承自Object,但是传入特定类时需要在实现时进行强制转化才能正常运行,因此我们可以在实现这个接口时传入参数

      //不传参数
      class Abc implments B {
          ...
          public int getInfo(Object o){
              Abc a = (Abc) o ;
              ...
          }
      }
      //传入参数
      class Abc implements B {
          ...
          public int getInfo(Abc a){
              ...
          }
      }
      
  • 接口和抽象类的区别

    • 接口可以扩展多个,抽象类扩展一个
    pulbic interface Campus {
      ...
    }
    
    public abstract class School {
      ...
    }
    
    class Student implements Abc,Campus  //ok
    class Student extends School  //ok
    
    //继承类和扩展接口可以一起写
    class Student extends School implements Campus
    

你可能感兴趣的:(Java-接口)