楼上说的很好了,我补充下:
super()与this()的区别
This():当前类的对象,super父类对象。
Super():在子类访问父类的成员和行为,必须受类继承规则的约束
而this他代表当前对象,当然所有的资源都可以访问.
在构造函数中,如果第一行没有写super(),编译器会自动插入.但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰).此时你必须加入对父类的实例化构造.而this就没有这个要求,因为它本身就进行实例化的构造.
而在方法中super和this使用的方法就差不多了.只不过super 要考虑是否能访问其父类的资源.
当然这里有个特例。比如说:
public class Test extends Date{
public static void main(String[] args) {
new Test().test();
}
public void test(){
System.out.println(this.getClass().getName());
System.out.println(getClass().getName());
System.out.println(super.getClass().getName());
}
}
这3个打印的都是Test。
因为所以类的最终父类都是Object,如果该方法getClass()是Object中的方法,并且被final修饰之后,子类不能覆盖它。
所以子类调用该方法,都是父类的方法,不管是否有this和super修饰。 |