Interface(接口)、与抽象类的异同

Interface(接口)、与抽象类的异同

定义 :

是一种顶级的规范契约,必须严格遵守

关键字interface

public interface 接口名{
  //属性,都是公开静态属性(常量)
  //方法,都是公开的抽象的方法
}

命名规范

以l开头
以able结尾

特点

接口中不能有普通属性,构造方法,普通方法,可以有公开静态的常量属性以及抽象方法(关键字可以省略 public abstract),默认方法和静态方法。

注意: 真正开发中接口中往往只有方法,所以,接口是一种方法(行为)的集合

接口不能实例化,它天生是用来被实现的,一个类可以通过implements来实现接口,而且可以多重实现

接口和接口之间可以继承,而且可以多重继承

一个类实现了接口,则必须重写这个接口中所有的抽象方法,除非这个类是抽象类

注意⚠️

   /**JDK8.0默认方法*/
    default void method2() {
        System.out.println("接口的默认方法...");
    }
默认方法是java8中新添加的方法,其重要作用就是“接口演化”。
假如很久之前创建了一个接口,并且这个接口已经被很多类实现了,但是现在你需要给这个接口中扩展一个新方法A,这就导致前面那些已经实现该接口的类必须要重写这个方法A,否则就不能编译。
而使用默认方法就能很好的解决这个问题,你只需将要扩展的新方法A定义为default,原来的实现子类就不需要重写该方法,现在要实现该接口的子类就可以扩展这个方法了。
    /**JDK8.0静态方法*/
    public static void method3() {
        System.out.println("接口中的静态方法");
    }
接口静态方法和默认方法类似,只是接口静态方法不可以被接口实现类重写。
接口静态方法只可以直接通过静态方法所在的 接口名.静态方法名 来调用。

扩展分类

常量接口:只有属性(常量),没有方法的接口.统一管理系统中所有的常量,注意⚠️:JDK5.0之后提供了枚举用来代替常量接口

标记接口:既没有属性,也没有方法的接口,通过检测对象是否实现了标记接口从而进行不同的处理策略(区别对待)

抽象类和接口的异同

相同点:

都是抽象数据类型

都不能被实例化

不同点:

抽象类中可以有实现的方法,接口中不可以

抽象类中可以有构造方法,接口中不可以

抽象类只能单继承,但是接口可以多继承

一个类只能继承一个抽象类,但是可以实现多个接口

总结:抽象类关注类定义(名词),接口关注提供行为能力(动词)。

posted @ 2022-03-21 18:55  JanoCode  阅读(114)  评论(0)    收藏  举报