类,超类和子类(一)

来源:互联网 发布:ipad看tvb软件 编辑:程序博客网 时间:2024/06/01 10:27

类,超类和子类

定义新类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有两个用途,调用超类的方法, 调用超类的构造器