不是怎么还在转啊...

006-面向对象编程-继承

面相对象编程-继承

什么是继承?

  • Java中提供了一个关键字extends,用这个关键字可以让一个类和另一个类建立起父子关系

    public class B extends A {
        
    }
    
  • 子类能继承什么?

    • 子类能继承父类的非私有成员(成员变量、成员方法)
  • 继承后对象的创建

    • 子类的对象是由子类、父类共同完成的

权限修饰符

  • 权限修饰符是用来先知类中的成员(成员变量、成员方法、构造器)能被访问的范围
  • 分类:
    • private:只能本类
    • 缺省:本类、同一个包中的类
    • protected:本来、同一包中的类、子孙类
    • public:任意位置
  • private < 缺省 < protected < public
  • 一般规范:成员变量一般用私有,成员方法一般公开

继承的特点

  • 单继承:一个类只能继承一个直接父类

  • 多层继承:不支持多继承,单可以支持多层继承,如父类还继承于父类的父类

  • 祖宗类:所有Java类都是Object类的子类

    • 一个类一定直接或间接继承自Object,不显式继承Object也会默认继承Object
  • 就近原则:优先访问自己类中,自己类中没有才会访问父类

    • 如果子类和父类中有重复的成员变量名或方法名,那么在子类中不写this或者写上this都是访问子类中的变量和方法,如果必须访问父类变量或方法,那么要用super去点那个变量或方法
  • 注意:

    • 一个文件里可以有多个类,但只能有一个public类

方法重写

  • 当子类觉得父类中的某个方法不好用,或者无法满足自己需求时,子类可以重写一个方法名、参数列表一样的方法,去覆盖这个方法

  • 根据就进原则,优先调用的是子类的方法

  • 在重写方法上面加上@Override

    • @Override是方法重写的校验注解(标志):要求方法名称和形参列表必须与被重写方法一致,否则报错!
    • 更安全,可读性好,更优雅
  • 注意:

    • 子类重写父类方法时,访问权限必须大于或等于父类该方法的权限
    • 重写的方法返回值类型必须与被重写方法的返回值类型一样或更小
    • 私有方法、静态方法不能被重写,如果重写会报错
  • 常见应用场景:

    • 子类重写Object类的toString()方法,以便返回对象的内容
      • image-20250713013407260
      • 打印一个对象时默认调用toString()方法,可以省略不写
      • Object类的toString()方法是输出所谓的地址的
      • 开发中更希望输出对象时看对象的内容信息,所以子类需要重写Object的toString()方法,以便以后输出对象时默认就近调用子类重写的toString()方法返回对象内容
      • 可以右键生成

子类构造器的特点

  • 子类的全部构造器都会先调用父类的构造器,再执行自己的构造器内容
  • 子类构造器是如何实现调用父类构造器的?
    • 默认情况下,子类的全部构造器的第一行代码都是super(),无论写不写都有,它会调用父类的无参构造器
    • 如果父类没有无参构造器,则我们必须在子类构造器的第一行手写super(...),指定去调用父类的参数构造器
  • 无法直接在子类中设置有参构造器给父类的变量赋值,需要调用父类的有参构造器给父类变量赋值,再写代码给自己类中变量赋值

this(...)调用兄弟构造器

image-20250713015446540

  • 如果想默认其中的一些变量的初始化,可以直接用this(...)调用兄弟构造器,而把其中一些值设置为想设置的默认值
  • 注意:super(...)和this(...)都只能卸载构造器的第一行,而且两者不可共存
    • 不能共存是因为兄弟构造器调用过父类构造器
    • this(...)要放第一行是因为要先通过兄弟构造器调用父类构造器

posted @ 2025-07-18 03:10  Quirkygbl  阅读(14)  评论(0)    收藏  举报