Java学习(继承)——类,超类,子类(一)

目录

定义子类

覆盖方法(方法重写)

子类构造器

继承层次

多态


  • 为什么引入继承?

    • 假若现在有一个员工类Employee,在这里面的员工有普通职员,有经理,他们都领薪水,不过薪资待遇有一些不同,普通职员的工资组成只有基本工资,但是经理既有普通工资也有项目奖金,这种情况下,就需要用到继承。

    • 因为经理定义了一个新类Manager,并增加了一些新功能。但可以拥有Employee类中已经编写的代码,并保留了Employee类的所有字段

定义子类

Manager类继承了Employee类,这里使用关键字extends来表示继承

  • 格式:

    public class Manager extends Employee
    {
        added methods and fields;
    }
  • 关键字extends表明正在构建的新类Manager类派生于一个已经存在的类Employee类

  • 这个已经存在的类Employee称为超类(superclass),基类(base class),父类(parent class)

  • 新类称为子类(subclass),派生类(derived class),孩子类(child class)

  • 超类和子类是Java最常用的两个术语

  • 尽管Employee类是超类但不意味着超类币子类有更多的功能,其实恰恰相反。子类比超类有更多的功能。

  • 在这里给出Employee类

  • 在这里给出Manager类

  • 子类不仅有自己的方法和实例字段,还从超类中继承了name,salary,和hireDay这三个字段

  • 子类的对象不仅能调用自身类的方法可以调用其父类的方法

  • 在扩展超类定义子类的时候需要指出子类和超类的不同之处,因此在设计类的时候应该将一般的类放在超类中,将比较特殊的类放在子类中

  • 注意私有的静态字段或者私有的方法属于类本身,无法被子类继承

覆盖方法(方法重写)

  • 超类中的某些方法并不适用于子类,像超类中的getSalary方法,实际在Manager类中应该返回的是Salary和奖金的总和。这时就需要在子类中写一个getSalary方法来覆盖超类中的方法

  • 这样并不行,因为这样getSalary会不断地调用自身,直到程序的崩溃,在这里我们想要调用的是超类中的getSalary方法,在这里,就需要用到super关键字了

  • super.getSalary就指的是调用超类的getSalary方法,就不会让程序重复执行进而引起程序崩溃了

  • 那些方法不能被重写?

    • static方法,它属于类,不属于实例

    • final方法,它是常量,不能被改动

    • private方法,他是私有的不能被重写

子类构造器

  • 由于Manager类的构造器不能访问Employee类的私有字段,所以必须通过一个构造器来初始化这些私有字段

  • 在这里可以使用特殊的super语法来调用这个构造器

  • 注意:使用super语法调用构造器必须是子类构造器的第一条语句

  • 子类的有参构造器

  • 父类的有参构造器,供super调用

  • 在主程序中实例化Manager类,使用Manager的有参构造初始化字段,并打印输出字段的值

  • 如果子类在构造时没有显式的调用父类的构造器,那么就调用父类的无参构造器,如果父类没有无参构造器,那么就会报错

  • 下面展示默认调用了父类的无参构造器

     

  • this关键字的两个含义

    • 指示隐式参数的引用

    • 调用该类的其他构造器

  • super关键字的两个含义

    • 调用超类的方法

    • 调用超类的构造器

  • 调用构造器的语句只能作为另一个构造器的第一条语句出现,参数可传本类(this)的构造器,也可以传递给超类(super)的构造器

继承层次

  • 什么是继承层次?

    • 由一个公共超类派生出来的所有类的集合称为继承层次

  • 什么是继承链?

    • 从某个特定的类到其祖先的路径称为该类的继承链

  • Java只支持单继承,不支持多继承,但提供了一些多重继承的功能

多态

  • 多态的引出:

    • 在Java中对象变量是多态的,一个对象变量的类型是固定的,例如new employee();这个变量类型就是employee类型的。但是对象变量的引用类型却不是固定的

  • 什么是多态?

    同一个方法可以根据发送对象的不同采用多种不同的行为方式

  • 多态存在的条件:

    1. 两个类有继承关系

    2. 子类重写父类方法

    3. 父类引用指向子类对象

  • 为什么要用多态?

    • 在现实世界中一个小明即属于学生类Student也属于Person类,出现了多种形态,当父类引用变量指向子类时,多态就时一个接口,在使用不同的实例而执行不同的操作

  • 注意:在使用多态后的父类指向子类后,父类引用变量调用方法时,会调用子类重写的方法

     

     

  • 子类能调用父类的方法和自身的方法,父类能调用自身的方法和子类重写的方法,不能调用子类独有的方法

       参考书籍:Java核心技术 卷1(原书第11版)

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Iron_Sp-man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值