• .Net转Java自学之路—基础巩固篇六(继承)


    Java中只支持单继承,不支持多继承(确切的说,是Java改良了多继承,避免了安全隐患的产生) Java可以存在多层(多重)继承。例:A,B extends A,C extends B

    最父类(A)定义的功能是该体系中最共性的功能。要了解该体系的功能,只要参考最父类的功能即可。

    多重继承原则:

      1、最父类定义的时该体系中最共性的功能。

      2、要使用该体系功能,建议建立最子类对象调用来完成。

    好处:

      1、提高代码的复用性。

      2、继承的出现让类与类之间产生了关系,该关系的出现是面向对象第三个特征“多态”的产生;继承是多态的前提。

      3、有利于程序的扩展。

    什么时候定义继承?

      继承是用于程序设计;只要一个事物是另一个事物的一种,就可以用继承体现。

    继承的子父类成员特点:

      成员变量、成员函数、构造函数

      成员变量:

        在子父类中出现同名的成员变量时,用this调用子类的成员变量,用super调用父类的成员变量。

      成员函数:

        当子父类中出现相同的函数时,在子类对象调用该函数时,父类的该函数貌似被覆盖。这就是函数的一个特性(覆盖、重写、override)。【函数还有另一个特性(重载、overload)】

        覆盖/重写(override):在子父类中出现相同的函数时,就发生了覆盖操作。

        什么时候使用覆盖?

          重新对函数进行描述,并定义新功能时。

      构造函数:

        子父类中构造函数特点:

          父类的构造函数优先运行于子类中的构造函数。因在子类构造函数的第一行其实隐藏了一个默认的隐式语句 super()

          子类中都有一个默认的super()语句,是因在子类进行实例化时,需要先进行父类对其成员的初始化操作。

          子类中所有构造函数默认都会访问父类的空参数的构造函数。当父类没有空参数的构造函数时,子类必须通过super()或this()语句来明确指向子类或父类的构造函数。

        简单来说,子类的构造函数必须访问父类的构造函数,而父类的构造函数的初始化动作必须要优先完成,所以super()语句必须放在第一行。

        当子类的构造函数中存在this()语句,那么该构造函数内就没有了super()语句。so、在一个构造函数中this()与super()语句只能存在一个。但子类的构造函数中至少有一个构造函数存在super()语句来调用附列的构造函数,以完成父类的初始化。

    super 关键字

      this 与 super 的区别:

        1、this 调用的时本类的对象,super 调用的父类的存储空间。

        2、this 可以区分成员变量与局部变量重名的情况。super 可以区分子父类中成员变量重名的情况。

      this() 与 super() 语句的区别:

        1、this()语句调用的是本类的构造函数;super()语句是调用的父类的构造函数。

    final 关键字

      继承的弊端:打破封装性。

      如果恶意继承并进行不正确的覆盖,会导致原功能错误,打破封装性。那么可以用 final 关键字来完成不让其它类继承,来解决这个问题。

      特点:

        1、final 关键字可以修饰类、方法、变量。

        2、final 关键字修饰的类时最终类,不可被继承。

        3、final 关键字修饰的函数不可被覆盖。

        4、final 关键字修饰的变量时一个常量,只能赋值一次。这个赋值是显示初始化赋值。

      final 关键字修饰的常量一般都有规范书写,被 final 修饰的常量名称所有字母都要大写;如果有多个单词,则在每个单词中间加“_”分割。

    抽象类  abstanct

      多个类中都有共性的功能,但只有函数名相同,函数的具体功能不同。这时,用 sbstanct 关键字对相同的函数声明进行提取,不提取函数内容。那么当类中方法出现抽象方法时,该类也必须是抽象类。

      抽象类可以定义事物的共性内容,而且定义抽象类,可以强迫子类来实现。

      特点:

        1、抽象类、方法必须用 abstanct 关键字修饰。

        2、抽象方法必须放在抽象类中。

        3、抽象方法不可被实例化。也就是不可创建该类的对象。

        4、只有抽象类的子类将所有的抽象方法覆盖,则该子类才可以创建对象。否则该子类还是一个抽象类。

      细节:

        1、抽象类也有构造函数。

        2、抽象类中可以不定义抽象方法。目的是为了不让该来创建对象。

        3、抽象类不能与 final、static、private 关键字共存。因为所有的抽象方法都需要被覆盖。而 final 不可以;private 私有的,子类无法直接访问;static 不需要对象,类名可以直接调用方法,而直接调用抽象函数没有意义。

      子父类覆盖细节:

        1、子类覆盖父类的函数时,子类函数必须要保证权限大于等于父类。

        2、子类无法覆盖父类的私有成员。

  • 相关阅读:
    *Binary Tree Inorder Traversal
    First Unique Character in a String
    回溯法模板
    *Linked List Random Node
    *Odd Even Linked List
    *Maximum Product of Word Lengths
    Flatten 2D Vector
    Docker (dockerfile)
    Docker数据卷
    Docker入门
  • 原文地址:https://www.cnblogs.com/zltao/p/9038947.html
Copyright © 2020-2023  润新知