接口

定义

Java中的接口就是功能的封装, 用来扩展类的功能。接口也可以理解为一组操作规范,或者是一个协议。

[修饰符] interface 接口名 {

​ 功能(接口中的方法默认使用public abstract修饰)

}


实现

  • 接口中方法默认使用public abstract修饰, 一般情况下接口中只有抽象方法。


    接口中还可以定义public static final常量 , public static 方法, public default方法。


    public interface MyInterface {
        void m1();	//接口中方法默认使用public abstract修饰, 一般情况下接口中只有抽象方法。
        
        int n = 88;	//接口中字段默认使用public static final修饰
        
        public static void func1() {	//接口中可以定义静态方法,通过接口名调用
            //方法体
        }	
        
        public default void func2() {	//接口中方法如果使用default修饰,在接口中可以有磨人的方法体,实现类可以重写该方法,也可以不重写
            //方法体
        }
        
    }
    

  • 类实现了接口,需要重写接口的抽象方法, 如果没有重写接口中所有的抽象方法,实现类需要定义为抽象类。


  • 接口是一种引用数据类型, 可以定义变量, 但是接口不能实例化对象, 接口引用需要赋值实现类对象, 或者接口的匿名内部类对象。


  • 接口多态, 接口引用调用接口中抽象方法,实际上执行的是实现类对象的方法。接口存在就是为实现多态的。


  • 一个类可以同时实现多个接口, 需要重写所有接口的所有抽象方法。


  • 接口也支持继承,并且接口支持多继承


  • 接口的引用可以被匿名内部类对象赋值


  • 方法的形参是接口,在调用的时候可以传递匿名内部类对象。




口与抽象类的异同点


相同:
  1. 都可以定义抽象方法
  2. 都不能实例化对象
  3. 定义的抽象方法都需要被重写
  4. 都可以定义public static 方法,public static final 常量

不同:
  1. 意义不同
    • 抽象类是对实物更高级的抽象
    • 接口是对功能的封装
  2. 定义方式不同
    • 抽象类用abstract
    • 接口用interface
  3. 内容不同
    • 抽象类中除了抽象方法外,还可以定义构造方法等普通类中定义的所有成员。
    • 接口中只能定义:
      1. 抽象方法
      2. public static 方法
      3. public default方法
      4. final 常量
  4. 使用方式不同
    • 抽象类需要被子类继承(extends)
    • 接口需要被实现类实现(implements)
  5. 类只支持单继承,接口支持多继承
  6. 应用场景不同
    • 一般情况下, 对类进行功能的扩展,优先选择接口
    • 除了扩展功能外, 还需要保存不同的数据,只能选择抽象类; 抽象类还可以约束所有的子类都具有相同的功能(子类必须重写抽象类的方法)


接口的应用


  1. 使用接口来封装功能(操作)

  2. 接口可以定义一组操作规范

    如开发某个项目时, 在相似模块中有一些操作是相同的, 可以把这一组相同的操作封装在一个接口中,就相当于通过接口定义了一个操作规范



提倡面向接口编程

  1. 接口使用比较灵活,一个类在继承父类的同时,可以实现多个接口


  2. 接口比较容易拓展,接口引用可以赋值各种实现类的对象,经常把接口引用作为方法形参,在调用方法时,可以传递各种实现类对象


  3. 接口可以使项目分层

分析项目不分层的弊端






原文地址:https://www.cnblogs.com/huochemeiyouhuo/p/12269231.html