美文网首页
接口和抽象类的区别

接口和抽象类的区别

作者: 垂直居中的句号 | 来源:发表于2023-02-02 23:15 被阅读0次

    区别1:定义关键字不同
    接口使用关键字 interface 来定义。 抽象类使用关键字 abstract 来定义。

    区别2:继承或实现的关键字不同
    接口使用 implements 关键字定义其具体实现。 抽象类使用 extends 关键字实现继承。

    区别3:子类扩展的数量不同
    接口的实现类可以有多个,而抽象类的子类,只能继承一个抽象类

    区别4:属性访问控制符不同
    接口中属性的访问控制符只能是 public,接口中的属性默认是 public static final 修饰的。
    抽象类中的属性访问控制符无限制,可为任意控制符

    区别5:方法控制符不同
    接口中方法的默认控制符是 public,并且不能定义为其他控制符,

    抽象类中的方法控制符无限制,其中抽象方法不能使用 private 修饰,

    区别6:方法实现不同
    接口中普通方法不能有具体的方法实现,在 JDK 8 之后 static 和 default 方法必须有方法实现,

    static 或 default 方法如果没有方法实现就会报错,而普通方法如果有方法实现就会报错。

    抽象类中普通方法可以有方法实现,抽象方法不能有方法实现,

    区别7:静态代码块使用不同
    接口中不能使用静态代码块,抽象类中可以使用静态代码块,

    接口中可以有public static final 修饰的成员变量

    抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

    抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

    抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

    构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

    抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

    抽象方法需要被实现,不能被声明为静态,private,final修饰

    ① 抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

    ② 设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。

    1.抽象类的使用场景

    既想约束子类具有共同的行为(但不再乎其如何实现),又想拥有缺省的方法,又能拥有实例变量

    如:模板方法设计模式,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现。

    2.接口的应用场景

    ① 约束多个实现类具有统一的行为,但是不在乎每个实现类如何具体实现

    ② 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。

    ③ 实现类需要具备很多不同的功能,但各个功能之间可能没有任何联系。

    ④ 使用接口的引用调用具体实现类中实现的方法(多态)

    相关文章

      网友评论

          本文标题:接口和抽象类的区别

          本文链接:https://www.haomeiwen.com/subject/fayghdtx.html