继承之子类与超类
继承:通过扩展一个已经存在的类而形成的一个新类,在这个新类中,自动存在父类中的域和方法,并且可以有自己独特的域和方法。
1.创建一个类
public class Employee { private String name; private double salary; private LocalDate hireDate; public Employee(String name,double salary,int year,int month,int days) { this.name=name; this.salary=salary; hireDate=LocalDate.of(year,month,days); } public String getName() { return name; } public double getSalary() { return salary; } public LocalDate getHireDate() { return hireDate; } public void raiseSalary(double byPercent){ double raise=salary*byPercent/100; salary+=raise; } }
2.创建子类
public class Manager extends Employee{ private double bonus; public Manager(String name,double salary,int year,int month,int days) { super(name,salary,year,month,days); bonus=0; } @Override public double getSalary() { return super.getSalary()+bonus; } public double getBonus() { return bonus; } public void setBonus(double bonus) { this.bonus = bonus; } }
Note:
- 子类的构造方法:在构造Manager对象时,需要对name,salary等域进行初始化,而这些域都时父类的私有域,只能通过父类的构造器来访问,所以用到了super,用以调用父类的构造器完成初始化。或者在子类中页添加name等域,不建议这样做。
- getSalary()的重写:父类中方法并不都适用于子类,子类需要重写父类中方法。并且也使用到了super来调用父类中的方法。
测试:
public class TestSubClass { public static void main(String[] args) { Manager manager=new Manager("liuchen",5000.0,2018,6,25); manager.setBonus(2000.0); Employee[] e=new Employee[3]; e[0]=manager; //引用的Manager对象 e[1]=new Employee("zhangsan",2000.0,2018,5,25); e[2]=new Employee("lisi",2000.0,2018,5,27); for(Employee em:e) { System.out.print(em.getName()+"-->"+em.getSalary()+"-->"+em.getHireDate()); } } }
运行结果:
liuchen-->7000.0-->2018-06-25
zhangsan-->2000.0-->2018-05-25
lisi-->2000.0-->2018-05-27
可以看到,子类对象正确的调用了getSalary(),因为e[0]引用的是Manager对象。

浙公网安备 33010602011771号