Day06_31_接口(Interface)

时间:2021-05-17 18:34:50

java 接口(Interface)

  • 接口和抽象类的区别?

    • 子类只能通过extends关键字去继承抽象类(Abstract),子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类)。

    • 定义一个接口实现类,实现了某个接口,那么必须重写接口中的全部方法,一个类可以实现多个接口,而一个类只能继承一个抽象类。

    • 接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现。

    • 接口中所有的方法都是抽象的,但抽象类可以包含部分具体方法的实现,所以,在一些场合下抽象类比接口更有优势。

    • 实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。

    • 接口强调特定功能的实现,而抽象类强调所属关系。

    • 接口成员变量默认修饰为 public static final,必须赋初值,不能被修改;接口所有的成员方法默认修饰 public abstract的。

    • 抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native等修饰,必须以分号结尾,不带花括号。

    • 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量

    • 接口只能做方法申明,抽象类中可以做方法申明,也可以做部分方法实现

    • 抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。

    • 接口描述了方法特征不给出实现,一方面解决了java的单继承问题,另一方面增强了可接插性。

    • 抽象类提供了部分具体方法实现,抽象类是不能实例化的,抽象类的作用主要是可以把公共的代码移植到抽象类中,便于使用。

    • 定义接口的语法

      [访问控制修饰符] interface 接口名 {

              // 常量
      
             // 抽象方法

      }

          // interface 定义接口, 接口都需要有实现类
      public interface UserService { // public abstract 是默认存在的
      public abstract void run(String name); //public abstract 可以省略不写
      void serviceRun(int a); void add(String name);
      void delete(String name);
      void update(String name);
      void query(String name); } // 实现类 //UserService 实现类 // 实现了接口的类,必须要重写接口中的方法。 // 可以实现多个接口
      public class UserServiceImpl implements UserService,TimeService { @Override
      public void run(String name) { }
      }
  • 接口需要注意

    • 定义常量 (接口中的常量必须用 public static final修饰,但是是可以省略的)

    • 定义抽象方法必须用 public abstract修饰,但是可以省略,默认存在。

    • 一个类去实现一个接口必须用 implements 关键字 不能使用 extends 关键字;

    • 接口中没有构造方法

  • 接口的作用

    • 可以使项目分层,所有层都面向接口开发,开发效率提高了。

    • 接口代码和代码的耦合度降低,灵活性提高。

    • 接口和抽象类都能完成某个功能的时候优先选择接口,因为接口可以多实现多继承。

    • 并且一个类除了实现接口之外还可以去继承其他类(保留了类的继承)