java继承
类继承格式
class Manager extends Employee { //添加方法和域 public void setBonus(double b) { bonus = b; } public getSalary() { double baseSalary = super.getSalary(); return baseSalary + bonus; } private double bonus; }
java继承采用extends关键字,代替了c++里面的冒号,在java中,所有继承都是公有继承,没有C++中的私有继承和保护继承。
在这里,Manager为Employee的子类,Employee为Manager的超类。
super
由于Manager的薪水计算方法跟普通雇员的计算方法不同,所以需要在Manager类中复写Employee类中的getSalary方法,
由于Manager的薪水为基本工资再加奖金,所以可以调用Employee的getSalary方法然后再加上奖金,但是由于两者方法名字相同,
所以不能直接调用,需要使用super.getSalary()的方式来调用。super不是一个对象的引用,而是指示编译器调用超类方法的特有关键字,
与this不同。
super还可以在构造器中使用,例如在Manager中有如下构造器:
public Manager(String n, double s, int year, int day)
{
super(n, s, year, day);
bonus = 0;
}
在上述构造器中,super是调用的超类中的构造器,由于Manager类的构造器不能对超类Employee的私有域进行初始化,所以只能通过调用
超类的构造器来完成初始化,然后再初始化子类新增的域。如果子类没有显式调用超类的构造器,则调用超类的默认构造器,如果超类不存在默认构造器,则会报错。
在C++中,子类构造函数中会通过初始化列表来对父类进行初始化。
多态
在java语言中, 对象变量是多态的。一个超类的对象变量可以引用一个超类对象,也可以引用任何一个子类的对象