this() super() 是你如果想用传入当前构造器中的参数或者构造器中的数据调用其他构造器或者控制父类构造器时使用的,在一个构造器中你只能使用this()或者super()之中的一个,而且调用的位置只能在构造器的第一行,在子类中如果你希望调用父类的构造器来初始化父类的部分,那就用合适的参数来调用super(),如果你用没有参数的super()来调用父类的构造器(同时也没有使用this()来调用其他构造器),父类缺省的构造器会被调用,如果父类没有缺省的构造器,那编译器就会报一个错误。
为什么要在第一排呢?
example:
class A{ A() { System.out.println("You call super class non-args constructor!"); } } class B extends A{ B() { //这里,编译器将自动加上 super(); System.out.println("You call subclass constructor!"); } B(int c){ System.out.println("wrong,wrong"); } B(String n) { 这里为空 // super(); System.out.println("想想就是这样"); this(); //实际就是调用了B(){...},而B(){...}已经调用过一次,super();所以super()就被调用两次,也就是对A进行了两次初始化。而在实例化一个对象时,一 个 构造方法只能调用一次,这然显然是不对的. }
B(double c){ this(); this(3); //这里实际上也是调用两次super(),也就是对A进行两次初始化,所以其结果也不对 } }
注:任意一个类,它都一定有父类,如果你没有建立该类的父类,那么该类的父类为Object;
|