file Employee.java
public class Employee
{
private String name;
private int age;
private double salary;
Employee()
{
}
Employee(String name,int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public void setSalary(double salary)
{
this.salary = salary;
}
public double getSalary()
{
return salary;
}
}
file Manager.java
public class Manager extends Employee
{
private double bonus;
Manager()
{
}
Manager(String name,int age)
{
super(name,age);
}
public void setBonus(double bonus)
{
this.bonus = bonus;
}
public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
}
file TestEmployee.java
public class TestEmployee
{
public static void main(String[] args)
{
Employee[] staff = new Manager[2];
Manager boss1 = new Manager("Tommy",21);
staff[0] = boss1;
staff[0].setSalary(5000);//staff是Employee类型变量,只可访问Employee类下的方法
boss1.setBonus(5000);//boss1是Manager类变量,可访问Manager类下的方法
boss1.getSalary();//该方法是Manager中的方法
Employee boss2 = new Manager("Peter",22);
staff[1] = boss2;
staff[1].setSalary(3000);
boss2.getSalary();//boss2是Employee类变量,无法访问Manager下的域及方法
for(Employee e:staff)
{
System.out.println("name = " + e.getName() + "\tage = " + e.getAge() + "\tsalary = " + e.getSalary());
}
}
}
运行结果:
name = Tommy age = 21 salary = 10000.0
name = Peter age = 22 salary = 3000.0
综上:Employee 变量1 = new Manager();
变量1仍然仅可调用Employee中的方法