JavaSE--继承

  1. 继承
    a.为什么需要继承:为了解决成员重复问题。
    b.从代码上而言:在我们描述若干个类的时候,发现这些类中有大部分相同的成员,所以就可以把这部分重复的内容抽取出来,用另一个类描述,我们抽出来新建的类就成为父类,其他的类为子类,父类和子类之间的继承关系,用extends来表示。
    c.从业务逻辑上而言:父类和子类必须属于同一个种类
    在这里插入图片描述d.继承的好处
    继承的出现提高了代码的复用性,提高了软件开发效率
    继承的出现让类与类之间产生了关系,提供了多态的前提。

  2. 单继承与多继承
    类与类之间为单继承,接口与接口之间为多继承
    在这里插入图片描述继承之间是有传递性的,Object类是任何一个类的最终父类

  3. 子父类中成员的一些特点
    a.成员变量:
    如果父类中有(非私有),而子类中没有,则访问父类的
    如果父类中没有,而子类中有,则访问子类的
    如果父类中有(非私有),子类中有 访问子类的
    如果父类中有(非私有),子类没有,但是子类有同名静态变量所以先访问子类的静态
    在这里插入图片描述当子父类中出现了同名成员变量时,在子类中若要访问父类中的成员变量,必须使用关键字super来完成
    在这里插入图片描述this存的是当前对象的地址,用于区分调用者
    super指向的是其父类的字节码空间(父类空间)
    b.成员函数:当在程序中通过对象调用方法,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类不存在就会执行父类中相应的方法。
    在这里插入图片描述成员函数特殊情况——覆盖
    子类中出现与父类一模一样的方法时,会出现覆盖操作,也成为override重写,复写或覆盖
    在这里插入图片描述上边父类和子类的成员函数show( )相同,所以这个时候子类就要重写父类的show()。
    重写的应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以复写父类中的方法,这样即沿袭了父类的功能,有定义了子类特有的内容。
    重写需要注意的问题:
    1.子类方法覆盖父类方法,必须要保证权限大于等于父类权限
    2.静态只能覆盖静态,或者被静态覆盖,意思就是*静态函数不存在重写***。
    3.重写时,必须和原函数的表达形式一模一样。
    c.构造函数
    在创建子类对象时,父类的构造函数会先执行,因为子类中所有构造函数的第一行有默认的隐士
    super();**语句。
    为什么子类对象初始化都要访问父类中的构造函数?因为子类继承了父类的内容,所以创建对象时必须要先看父类是如何对内容进行初始化的 .

  4. final关键字
    为什么要出现final关键字?
    有些类在描述完之后,不想被继承,或者有些类在中的部分方法功能是固定的,子类不能重写。可是当子类继承了这些特殊类之后,就可以对其中的方法进行重写,因此要解决这种问题,就需要加fianl关键字。
    fianl可以修饰类,类的成员,以及局部变量。
    a.final修饰类不可以被继承,但是可以继承其他类
    b.final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final
    c.final修饰的变量称为常量,这些变量只能赋值一次,定义的时候必须有初始值
    c.final修饰的引用类型变量,表示该引用变量的引用不能变,而不是引用所指的对象中的数据还是可以变化的
    final修饰变量 表示该变量所存储的数据的地址不可更改
    在这里插入图片描述

发布了22 篇原创文章 · 获赞 3 · 访问量 347

猜你喜欢

转载自blog.csdn.net/qq_45161607/article/details/103380723