super的作用
super 可以用来调用父类中的方法或构造器
调用父类中的方法:
若父类中的某些方法对子类不适用。即可以在子类中提供一个新的方法来覆盖/重写(override)父类中的这个方法
eg:Manager
方法继承了 Employee
方法,现在,现在要在子类中重写父类中的getSalary
方法(获取私有字段salary的值):
public class Manager extends Employee{
...
public double getSalary(){
...
}
...
}
若:
public double getSalary(){
return salary + bonus;// won't work
}
这样是不行的,因为只有 Employee
方法能直接访问 Employee
类的私有字段。所以 Manager
类的getSalary
方法不能直接访问 salary
字段
-
**如果
Manager
类要访问其父类中的私有字段,就要像其他方法一样使用公共接口, 在这里的话就是要使用Employee
类中的公共方法getSalary
-
现在:
public double getSalary(){ double baseSalary = getSalary();//still won't work return baseSalary + bonus; }
还是有问题的,因为它调用
getSalary()
方法时是在调用Manager
类中的方法(调用自身)。
super
为解决上述问题,可以使用特殊的关键字super
super 可以使我们调用父类中的方法(啃老)
super.getSalary();
此语句调用的是Employee
类中的getSalary
方法
super 与this 不一样,因为super不是一个对象引用
super调用父类的构造器
例:
public Manager(String name, double salary. int year, int month, int day){
super(name, salary, year, month, day);
bonus = 0;
}
这里的super语句表示调用父类中有对应参数类型的构造器
如果子类的构造器美哟显式的调用父类的构造器,将自动调用父类的无参构造器,若此时父类中没有无参构造器就会报错
注:
this的两个含义:
- 指示隐式参数的引用
- 调用该类的其他构造器
super的两个含义:
- 调用超类的方法
- 调用超类的构造器
参考文献:Java核心技术卷I 第五章 继承
以上为本人个人学习笔记,如有不当之处望不吝赐教