初识继承(inheritance)

写在前面:博主在《软件构造》课程的实验当中,第一次遇到了继承(inheritance)的问题,由于没有java相关课程学习的前提,使用起来完全没有头绪。在这里博主介绍一下自己对继承的理解与心得。

一.继承的基本思想

可以基于已有的类创建新的类。继承已存在的类就是复用(继承)这些类的方法,而且可以增加一些新的方法和字段,使新类能够适应新的情况。

二.类、超类和子类

(1)定义子类

可以如下继承Employee类来定义Manager类,这里使用关键字extends表示继承。

​
public class Manager extends Employee
{
    added methods and fields
}

​

关键字extends表明正在构造的新类派生于一个已存在的类。这个已存在的类称为超类(superclass),基类(base class)或父类(parent class);新类称为子类(subclass)、派生类(derived class)或孩子类(child class)。超类和子类是java程序员最常用的两个术语,而了解其他语言的程序员可能更加偏爱使用父类和孩子类,这也能很贴切地体现“继承”。

尽管Employee类是一个超类,但并不是因为它优于子类或拥有比子类更多的功能。实际上恰恰相反,子类比超类拥有的功能更多。

通过扩展超类定义子类的时候,只需要指出子类与超类的不同之处。因此在设计类的时候,应该将最一般的方法放在超类中,而将更特殊的方法放在子类中,这种将通用功能抽取到超类的做法在面向对象程序设计中十分普遍。

(2)覆盖方法

超类中的有些方法对子类Manager并不一定适用。具体来说,Manager类中的getSalary方法应该返回薪水和奖金的总和。为此,需要提供一个新的方法来覆盖(override)超类中的这个方法:

public class Manager extends Employee
{
    ...
    public double getSalary()
    {
        ...
    }
    ...
}

Manager类中getSalary()的正确实现版本为:

public double getSalary()
{
    double baseSalary = super.getSalary();
    return baseSalary + bonus;
}

 (3)子类构造器

在例子的最后,我们来提供一个子类构造器。

public Manager(String name, double salary, int year, int month, int day)
{
    super(name, salary, year, month, day);
    bonus = 0;
}

这里的关键字super具有不同的含义。语句

super(name, salary, year, month, day);

是“调用超类Employee中带有n、s、year、month、day参数的构造器”的简写形式。

由于Manager类的构造不能访问Employee类的私有字段,所以必须通过一个构造器来初始化这些私有字段。可以利用特殊的super语法调用这个构造器。使用super调用构造器的语句必须是子类构造器的第一条语句。

通过查阅书籍和网络资料,博主终于是稍微理解了继承,进而艰难的完成了课程实验。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值