【自学java笔记#第二十一天#】爸爸类和儿子类

选用教材:《Java核心技术卷一》

第五章 继承

一、用超类Employee和子类Manager来说明两者的关系

1、主函数部分

package inheritance;

public class ManagerTest 
{
    public static void main(String[] args)
    {
        var boss=new Manager("Carl Cracker",80000,1987,12,15);//Manager是子类
        boss.setBonus(5000);
        var staff=new Employee[3];//Employee是超类
        staff[0]=boss;
        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());
    }

}

2、超类Employee部分

package inheritance;

import java.time.LocalDate;

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;
        hireDay=LocalDate.of(year, month, day);
    }
    public String getName()
    {
        return name;
    }
    public double getSalary()
    {
        return salary;
    }
    public LocalDate getHireDay()
    {
        return hireDay;
    }
    public void raiseSalary(double byPercent)
    {
        double raise=salary*byPercent/100;
        salary+=raise;
    }

}

3、子类Manager部分

package inheritance;

public class Manager extends Employee
{
    private double bonus=0;
    public Manager(String name,double salary,int year,int month,int day)
    {
        super(name,salary,year,month,day);
    }
    public double getSalary()
    {
        double baseSalary=super.getSalary();//重载超类的方法
        return baseSalary+bonus;
    }
    public void setBonus(double b)
    {
        bonus=b;
    }

}

二、一些容易出错的地方

1、命名冲突及编译器的智能功能

当另一个包里有一个同样命名为Employee的公共类时,eclipse可能不会提醒用户,而是直接在程序的最顶上加入一行import该包的语句。

最后我们写出来的程序就会出现诸如类型不匹配等报错信息,这时只需检查程序顶部、删掉import语句即可。

2、将setBonus方法误写为getBonus方法

java的命名规范告诉我们:以set开头的方法是更改器方法,而以get开头的方法是访问器方法。

于是,Bonus值从实例化对象的过程中直接传过来,我们想当然地会认为它是访问器方法。

我的理解是:一开始声明Bonus时就赋值了0,后来不管传来的值是多少,都属于更改了对象的状态,所以它是更改器方法。

猜你喜欢

转载自www.cnblogs.com/yizhinailu/p/12562591.html