类,超类和子类
定义新类manager 增加功能,可以使用employee类中已经有的代码。
格式
class Manager extends Employee
{
添加方法和域
}
extends表明正在构造的新类派生于一个已经存在的类。已经存在的类称为父类,基类,或超类,新类称为子类,派生类,孩子类
孩子类比父类拥有的功能多,青出于蓝而胜于蓝
增加域和一个用于设置这个域的方法
class Manager extends Employee
{
private double bonus; //增加的域
..
public void setBonus(double b) //增加用于设置这个域的方法
{
bonus=b;
}
}
setBonus方法不是在Employee类中定义的,属于Employee类的对象不能使用它
但是Manager类自动地继承了超类Employee中的getName,getHireDay方法,还从超类中继承了name,salary,hireDay这三个域
通用方法放到超类,特殊方法放在子类
覆盖超类的getSalary
public double getSalary()
{
return salary+bonus;
}
上面这个方法是错误的,因为Manager类并不能访问Employee的私有域salary,这时可以借助公有的接口,Emloyee的公有方法getSalary
public double getSalary()
{
double baseSalary = super.getSalary();//super是特有的关键字
return baseSalary+bonus;
}
如上述可以增加域增加方法覆盖超类,但是绝对不能删除继承的任何域和方法
super在构造器中的应用
public Manager(String n,double s,int year,int month,int day)
{
super(n,s,year,month,day);//调用超类Employee中含有n,s,year,month,day参数的构造器
bonus=0;
}
因为Manager类的构造器不能访问Employee类的私有域,必须利用Employee类的构造器对这部分私有域进行初始化
如果子类的构造器没有显式的调用超类德尔构造器,则自动地调用超类默认(没有参数)的构造器。如果超类没有不带参数额构造器,并且在子类的构造器中有没有显式的
调用超类的其他构造器,则Java编译器将报错
super有两个用途,调用超类的方法, 调用超类的构造器