前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础系列(十二):继承

Java基础系列(十二):继承

作者头像
山禾说
发布2019-01-21 10:01:26
3960
发布2019-01-21 10:01:26
举报
前言

Java中有一个非常重要的概念:继承。利用继承,我们可以通过一个已经存在的类构造一个新的类,继承已经存在的类就是服用这些类的方法和数据域,并且在原本类的基础上可以添加一些新的方法和域,以满足新的需求。

父类(超类)与子类

在Java中我们使用extends关键字来定义子类,extends代表的就是继承,如下例子:

/**
 * VIP用户类
 * @author Vi-Young
 */
public VIPUser extends User {

    //添加VIP会员特有的方法和字段
    ...
}

关键字 extends表示正在构造的新类派生于一个已经存在类。这个已经存在的类被称为父类(超类,基类);新创建的类被称为子类。在通过扩展父类定义子类的时候,仅仅需要指出子类和父类的不同之处。因此在设计类的时候,应该将通用的方法放在父类中,而将具有特殊用途的方法放在子类中。

重写(Override)

这里有两个类,一个是员工类(Employee),一个是经理类(Manager)。经理类是员工类的子类,但是员工类中的 getSalary()方法仅仅返回了员工的薪水,而经理类的 getSalary()需要返回的是薪水和奖金的总和,所以我们需要提供一个新的方法来覆盖父类中的这个方法。

/**
 * 经理类
 * @author Vi-Young
 */
public class Manager extends Employee {
    ...
    @Override
    public double getSalary() {
        return super.getSalary() + bonus;
    }
}

我们可以看到,上面的代码中用到了 super这个关键字,这里需要解释一下为什么我们会用这个关键字,因为Manager类的 getSalary()方法并不能直接的访问父类的私有域,如果我们想要访问这个私有域,就需要用到Employee的 getSalary()方法,这里就用到了 super关键字,这里还需要注意一点,很多人认为 superthis一样,是一个对象的引用,其实并不是这样的, super并不能赋给一个对象变量,它的作用就是告诉编译器调用父类方法的特殊关键字。

在子类中可以增加域,增加方法或覆盖超类的方法,然后绝对不能删除继承的任何域和方法。

子类构造器
public Manager(String name, double salary) {
    super(name, salary);
    bonus = 0;
}

这里的 super的意思是调用父类中具有name,salary参数的构造器

因为子类的构造器不能直接的访问父类的私有域,所以必须利用父类的构造器来对这部分私有域进行初始化,我们可以通过 super实现对父类构造器的调用,使用 super调用构造器的语句必须是子类构造器的第一条语句。

如果子类的构造器没有显式地调用父类的构造器,则将自动地调用父类默认的(无参)构造器。如果父类没有不带参数的构造器,并且在子类的构造器中又没有显式地调用父类地其他构造器,则Java编译器将报告错误。

继承层次

继承并不仅限于一个层次,有一个公共父类派生出来地所有类的集合被称为继承层次,从某个特定的类到其祖先的路径被称为该类的继承链,一个父类可以有多个继承链,父类的不同派生类之间不存在任何关系。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Vi的技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 父类(超类)与子类
  • 重写(Override)
  • 子类构造器
  • 继承层次
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档