Java基础03 继承与多态

  • 什么是继承?为什么要继承?
    继承是基于已有的类构造更加具体的类,这是对客观世界结构更加准确的刻画
  • 子类会从父类得到什么?(我们不计较底层实现,仅讨论逻辑)
    • 子类拥有父类的所有属性,无论用什么修饰符修饰;private属性在子类中应该说是被隐藏,毕竟我们还需要在子类的构造函数中调用父类构造函数去初始化它
    • 子类拥有父类的所有非private方法
  • 子类的构造器
    • 子类的构造器中需要显式调用父类的构造器
    • 若父类有无参构造器则可以不显式调用

  • 什么是多态?为什么要多态?
    • 多态地表达了继承的“is-a”关系;假设有一群人,有老师,有司机,有CEO,但归根结底都是人,无论是什么职业,都可以用“人”类型的变量来存储;而人有“说话”的行为,当具体到每个具体的人时,“说话”的方式就不同了,这就是多态性
    • 具体到Java层面就是用基类类型的变量去存储不同子类的对象,调用父类的方法时具体的对象会调用自身重写的方法
  • 确定调用哪个方法
    • 先在变量类型的类中寻找匹配函数(最佳匹配,包括该类型继承的父类的函数)
    • 再在子类中找其重写方法
      //A<-B<-C  B继承A,C继承B
      B x = new C();
      x.fun()

      首先会在B类中寻找最佳匹配,我们逻辑上可以认为A类的非public方法也属于B类;然后调用其在C中的重写方法(无重写就调用这个方法本身)


继承中需要注意的小点:一句话,子类不能比父类更通用,否则多态性会出现错误

  • 权限控制与继承:子类的权限控制大于等于父类
  • 返回值类型与继承:方法重写时,子类的返回值类型可以与父类的返回值类型相同或是其子类
  • 异常与继承:重写方法时,子类方法抛出的异常类型可以与父类方法抛出异常相同或是其子类

西瓜要挖着吃

一个通往大佬之路的男人

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注