关键字this有两个用途:
1.引用引式参数
2.调用该类其他的构造器
关键字super也有两个用途:
1.调用超类的方法
2.调用超类的构造器
这两个关键字的使用方式很相似.
调用构造器的语句只能最为另一个构造器的第一条语句出现.
构造参数既可以传递给本类(this)的其他构造器,也可以传递给超类(super)的构造器
多态(polymorphism)、动态绑定(dynamic binding)
一个对象变量可以引用多种实际类型的现象被称为多态(polymorphism).
在运行时能够自动地选择调用哪个方法的现象称为动态绑定(dynamic binding).
import java.util.*;
class Employee{
private String name;
private double salary;
private Date hireDay;
public Employee(String n,double s,int year,int month,int day){
name=n;
salary=s;
GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
hireDay=calendar.getTime();
}
public String getName(){
return name;
}
public double getSalary(){
return salary;
}
public Date getHireDay(){
return hireDay;
}
public void raiseSalary(double byPercent){
double raise=salary*byPercent/100;
salary+=raise;
}
}
class Manager extends Employee{
/**
*@param n the employee's name
*@param s the salary
*@param year the hire year
*@param month the hire month
*@param day the hire day
*/
private double bonus;
public double getSalary(){
double baseSalary=super.getSalary();
return baseSalary+bonus;
}
public void setBonus(double b){
bonus=b;
}
public Manager(String n,double s,int year,int month,int day){
super(n,s,year,month,day);
bonus=0;
}
}
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[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());
}
}