继承——类、超类、子类

继承——以工资管理系统为例

1.定义子类
用extends定义子类
子类自动继承超类中的所有方法,比超类封装更多的代码
一般将普遍的功能放在超类,更特殊的方法放在子类
2.覆盖方法
覆盖超类中对子类不适用的方法
关键字super.getSalary()表示调用超类中的getSalary()方法
3.子类构造器
子类的构造器不能访问超类的私有字段,故必须通过一个构造器来初始化这些私有片段
使用super调用构造器的语句必须是子类构造器的第一条语句
若子类构造器未显式调用超类的构造器,将自动调用超类的无参数构造器
4.多态
对象变量是多态的,如,一个Employee类对象可以调用Employee类型的对象,也可以调用其任何子类类型的对象
注意:不能把超类的引用赋给子类变量e.g. Manager m = staff[i],这样会使所有职员变量都变成经理变量

package interitance;

public class ManagerTest {
    public static void main(String[] args) {
        Manager boss = new Manager( "Carl Cracker",80000,1987,12,15 );
        boss.setBonus( 5000 );

        Employee[] staff = new Employee[3];
        //在数组中混合加入经理和员工
        staff[0] = boss;
        //staff[0]和boss引用同一个对象,但只把staff[0]看作Employee对象,但boss是Manager对象
        //注意:不能把超类的引用赋给子类变量e.g. Manager m = staff[i];
        staff[1] = new Employee( "Harry Hacker",50000,1989,10,1 );
        staff[2] = new Employee( "Tommy Tester",40000,1990,3,15 );

        for (Employee e:staff)
            System.out.println("name=  "+e.getName()+",salary = "+e.getSalary());
        //e.getSalary()能够选出应该执行的正确getSalary()方法
        //staff[0]是Manager对象,所以会调用Manager类里的getSalary方法
    }

}
package interitance;
//用extends定义子类
//子类自动继承超类中的所有方法,比超类封装更多的代码
//一般将普遍的功能放在超类,更特殊的方法放在子类
public class Manager extends Employee {
    private double bonus;

    public Manager(String name,double salary,int year,int month,int day){
        //调用超类Employee中带有name,salary,year,month,day参数的构造器
        super(name,salary,year,month,day);
        bonus = 0;
    }

    public double getSalary(){
        double baseSalary = super.getSalary();
        //覆盖超类中对子类不适用的方法
		//关键字super.getSalary()表示调用超类中的getSalary()方法
        return baseSalary +bonus;
    }

    public void setBonus(double b){ bonus = b; }

}
package interitance;

import java.time.*;

public class Employee {
    private String name;
    private double salary;
    private LocalDate hireDay;

    public Employee(String name,double salary,int year,int month,int day){
        this.name = name;
        this.salary = salary;
        LocalDate hireDay = LocalDate.of( year,month,day );
    }
    public void raiseSalary(double byPercent){
        double raise = salary * byPercent / 100;
        salary += raise;
    }

    public String getName(){ return name; }
    public double getSalary(){ return salary; }
    public LocalDate getHireDay(){ return hireDay; }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值