• 抽象类和接口


    参考:
    https://blog.csdn.net/aptentity/article/details/68942916
    https://blog.csdn.net/jason_lh1024/article/details/97388038
    https://blog.csdn.net/tracydragonlxy/article/details/78082600
    https://blog.csdn.net/h294590501/article/details/80303722
    李刚《Java疯狂讲义》

    相同点

    • 都不能被实例化
    • 都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法

    不同点

    接口作为系统和外界交互的窗口,接口体现的是一种规范。对于接口的使用者而言,接口规定了使用者必须向外提供哪些方法(以方法的形式来提供),对于接口的调用者而言,接口规定了调用者可以调用哪些服务,以及如何调用这些服务(就是如何调用方法)。接口类似整个系统的总纲,制定了系统各模块应该遵循的标准。

    抽象类作为系统中多个子类的共同父类,它所体现的是一种模板式设计,抽象类作为多个子类的抽象父类,可以被当作系统实现过程中的中间产品。

    其他具体不同点体现:

    • 接口里只能包含抽象方法、静态方法、默认方法和私有方法,不能为普通方法提供方法实现;抽象类可以包含普通方法;
    • 抽象接口里只能定义静态常量,不能定义普通成员变量;抽象类里都可以定义;
    • 接口里不包含构造器;抽象类里可以有构造器,但是抽象类的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作;
    • 一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过多个接口可以弥补Java单继承的不足

    java9接口包含的内容

    Java不同版本接口内容的变化情况

    常量

    格式:

    public static final 数据类型 常量名称 = 数据值;

    注: 一旦使用final关键字进行修饰,说明不可改变。

    注意事项;

    1.接口当中的常量,可以省略public static final ,注意:不写也照样表达这个意思。

    2.接口当中的常量,必须进行赋值:不能不赋值。

    3.接口中常量的名称,使用完全大写的字母,用下划线进行分隔。(推荐这种命名规则)

    抽象方法

    方法前面如果没有修饰符,默认为public abstract

    默认方法

    • JDK8 中为什么有接口默认方法
      以前创建了一个接口,并且已经被大量的类实现。
      如果需要再扩充这个接口的功能加新的方法,就会导致所有已经实现的子类需要重写这个方法。
      如果在接口中使用默认方法就不会有这个问题。
      所以从 JDK8 开始新加了接口默认方法,便于接口的扩展。
    • 接口中默认方法的规则
      1.默认方法使用 default 关键字,一个接口中可以有多个默认方法。
      2.接口中既可以定义抽象方法,又可以定义默认方法,默认方法不是抽象方法。
      3.子类实现接口的时候,可以直接调用接口中的默认方法,即继承了接口中的默认方法。
      4.接口中同时还可以定义静态方法,静态方法通过接口名调用。

    静态方法

    私有方法

    在Interface中编写私有方法时,我们应该遵循以下规则:

    • 我们应该使用私有修饰符(private)来定义这些方法。
    • 我们不能同时使用私有修饰符(private)和abstract来定义这些方法。
      • “私有”方法意味着完全实现的方法,因为子类不能继承并覆盖此方法。
      • “抽象”方法意味着无实现方法。这里子类应该继承并覆盖此方法。
    • 私有方法必须包含方法体,必须是具体方法。
    • 这些接口私有方法仅在该接口内是有用的或可访问的。我们无法从接口访问或继承私有方法到另一个接口或类。

    一般建议

    一般在接口中的方法和属性不要加任何修饰符号(public也不要加),尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量(阿里巴巴开发规范)。即接口中一般使用静态常量(实际由public static final修饰)和抽象方法(实际由public abstract修饰)

    其他

    必须通过实现类,来实现接口,实现类需要重写接口中所有抽象方法,只要有一个未重写,那么这个实现类自己就必须是抽象类。

  • 相关阅读:
    error LNK2001: unresolved external symbol "public: __thiscall ControllerInterface::ControllerInterface(class QObject *)" (??0ControllerInterface@@QAE@PAVQObject@@@Z) downloadcontroller.obj
    链接程序的时候遇到问题:fatal error LNK1104: cannot open file 'rctrl-d.lib'
    vs编译报错 BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
    qt 编译unresolved external symbol的错误解决
    程序外框不显示
    Pc移植到Mac的技术细节
    qt中moc的作用
    做回自己,保持作为一个男人的魅力是维持一个维持一段恋爱关系长久的前提
    NLP入门(三)词形还原(Lemmatization)
    NLP入门(二)探究TF-IDF的原理
  • 原文地址:https://www.cnblogs.com/lllliuxiaoxia/p/12287859.html
Copyright © 2020-2023  润新知