• Java中的抽象方法、抽象类和接口知识总结


    今天给Java中的抽象方法、抽象类和接口知识点做一个小小的总结。


    抽象方法:

    定义:Java中使用abstract关键字修饰的方法为抽象方法,抽象方法没有方法体。

    PS: 抽象方法没有方法体,但反过来说只要没有方法体就是抽象方法这句话是错误的,Java中还有一类native方法(本地方法)没有方法体,比如public native hashCode()就是一个本地方法,该类方法其实是使用C++实现的,Java允许通过特定的方式来调用C++的方法。


    抽象类:

    定义:抽象类也是使用abstract关键字来声明的,它可以包含[0,n]个抽象方法,抽象类无法直接实例化对象,需要通过多态的方式实现,子类继承抽象类必须实现抽象类的所有抽象方法。

    抽象类与普通类的区别: 抽象类可以看作是普通类的超集,普通类有的,抽象类全都有。普通类中的普通方法,构造方法,抽象类中全都可以存在,换句话说,抽象类就是比普通类多了一些抽象方法而已。

    抽象类的使用原则:

    1.被abstract定义的类称之为抽象类,抽象类无法直接实例化对象,可以通过向上转型进行实例化。
    2.抽象类中可以没有抽象方法(抽象类包含[0,n]个抽象方法,即0个也行),但只要一个类中定义了抽象方法,则这个类一定是抽象类。
    3.abstract和final以及private不能同时出现(抽象类无法直接实例化对象,需要通过多态来实现,而多态又依赖于继承和重写来实现,如果出现final关键字,则说明该类为最终类,没有子类,该方法为最终方法,无法重写;如果出现private关键字,则说明该类的方法无法跨类,只在类中可见,所有如果同时出现就会导致抽象类无法实例化对象)。
    4.抽象类是普通类的超集,抽象类中仍然可以存在普通方法和构造方法,且子类实例化时仍然满足继承的原则,先调用父类的构造方法,再调用子类的构造方法。
    5.抽象类A继承抽象类B,此时抽象类A,可以不重写抽象类B中的方法。如果是普通类继承,就得重写

    那么有个问题,我们明明已经有了普通类和普通方法,为什么还需要抽象类和抽象方法呢?

    解答:抽象类和抽象方法存在的意义就在于强制要求子类覆写某些方法,子类必须是满足继承关系才能继承抽象类,且一个子类只能继承一个抽象类(单继承局限)。


    接口:

    定义:接口是“更加纯粹的抽象类”,Java中使用interface来定义接口,接口中只有全局常量和抽象方法。

    PS: 接口与接口之间可以使用extends关键字实现继承,接口的继承是多继承的(并不是所有的继承都是单继承的)。

    接口的使用原则:

    1.在Java中子类使用implements表示实现一个父接口,必须覆写接口中所有的抽象方法。
    2.正因为接口中普遍只存在全局常量和抽象方法,因此,接口中方法的修饰public abstract、变量的修饰public static final统统可以省略不写,阿里编码规约也要求,接口中这些关键字都不出现。
    3.接口也无法直接实例化对象,必须通过子类向上转型为其实例化。
    4.一个子类可以同时使用implements关键字实现多个父接口(开发中的接口优先原则,优先考虑使用接口)。

    JDK8中有关接口的扩展内容:从JDK8开始,接口中允许存在普通方法,接口中的普通方法使用default关键字(default主要用来告知编译器这是接口中的普通方法,其实际权限还是public)来定义,普通方法有方法体,子类实现接口后可以直接使用接口中的普通方法。


    总结:

    在这里插入图片描述

  • 相关阅读:
    【微信小程序】微信小程序跳转H5页面的实现思路与方案
    分布式ID系统设计(1)
    Linux操作系统
    (17)Blender源码分析之闪屏窗口的菜单显示过程
    C++继承、多继承及菱形继承
    【python】pandas 索引操作
    cpu温度监测 Turbo Boost Switcher Pro for mac最新
    hash,ACM集训
    优彩云采集器下载-免费优彩云采集器下载地址
    GPU学习(1)
  • 原文地址:https://blog.csdn.net/qq_53130059/article/details/126888007