Java学习-类继承

前边已经知道了怎么定义和使用一个Java类,今天继续类继承的学习。

利用继承(inheritance),人们可以基于一个已存在的类构造一个新的类。继承一个类,就是复用这个类的方法和实例域。

简单设计一个实例:雇员(工资)、经理(工资+提成)、老板(工资+提成+股份)。

首先定义一个雇员:

package mypackage;

/**
 * @author wenji
 * 这是一个基类、父类、super class
 *
 */
//this指示隐式参数,即被构造的对象
//this可以调用类的其它构造器
//super调用父类的方法
//super调用父类的构造器
public class Employee
{
    private String m_sName = "";
    private double m_dSalary = 0.0;
//     实例域在定义时,可以直接初始化;也可以在构造器、初始化块中初始化;但一般不建议在初始化块中操作。
//    private,类可见
//    若忘了写访问修饰符private,则变量默认,对包内可见
//    public,外部可见
    public Employee() 
    {
        m_sName = "未命名";
        m_dSalary = -1000;
    }
    public Employee(String sName)
    {
        this.m_sName = sName;//this指示隐式参数,即对象本身
    }
    public Employee(double dSalary)
    {
        this.m_dSalary = dSalary;//this指示隐式参数,即对象本身
    }
    public Employee(String sName,double dSalary)
    {
        this(sName);//this调用类的其它构造器
//        this(dSalary);//this调用类的其它构造器,但构造器的调用必须是第一条语句
        //也就是说,一个构造器中不可能出现两个构造器。构造器+调用构造器=最多两个构造器
//        m_sName = sName;
        m_dSalary = dSalary;
    }
    //切记一定要记住写上访问修饰符
    public String getName()
    {
        return m_sName;
    }
    public double getSalary()
    {
        return m_dSalary;
    } 
    public void setSalary(double dSalary)
    {
        m_dSalary = dSalary;
    }
}

其次定义一个经理类:

package mypackage;

/**
 * @author wenji
 * 这是一个子类、sub class、继承类、derived class
 * 类继承自Employee
 *
 */
//使用extends关键字,表示继承关系

public class Manager extends Employee
{
    //定义了一个实例域之后,若没有方法使用,则会报出未使用的警告(构造器都不算)
    private double m_dBonus = 0.0;
    //若父类未提供默认构造器,则子类必须也不能定义,否则报错
    //且若父类未提供默认构造器,则子类继承会有问题,必须显示的定义默认构造器
    //但通常构造器都会根据实际需要来定义,一般不会用默认的
//    public Manager() {}
    //如果子类没有显示的调用父类的构造器,则会默认调用父类的默认构造器(没有参数的构造),若此时父类没有默认构造器,则会报错
    public Manager(String sName,double dSalary,double dBonus)
    {
        //super关键字按照构造器的格式写,即调用父类构造器
        //且调用父类构造器必须在本构造器的第一行
        super(sName,dSalary);
        m_dBonus = dBonus;
    }
    public double getSalary()
    {
        //可以使用super关键字调用父类的方法
        //但private域通常不能直接访问的,所以要使用方法访问
        double dSalary = super.getSalary()+m_dBonus;
        return dSalary;
    }
}
//this指示隐式参数,即被构造的对象
//this可以调用类的其它构造器
//super调用父类的方法
//super调用父类的构造器

最后是老板:

package mypackage;

public class Boss extends Manager
{
    private double m_dStock;//股份
    public Boss(String sName,double dSalary,double dBonus,double dStock)
    {
        super(sName,dSalary,dBonus);
        m_dStock = dStock;
    }
    public double getSalary()
    {
        double dSalary = super.getSalary()+m_dStock;
        return dSalary;
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值