注意:(1)在子类中的缺省构造器可以调用父类的缺省/非缺省构造器,在调用父类的缺省构造器时,
不用写super关键字直接可以调(因为super是隐式的);在调用父类的非缺省构造器时,
必须用super(参数)显示调用。如下面的案例所示:
class Art {
Art(){System.out.println("Art constructor1");}//(1)
Art(int i ) {
System.out.println("Art constructor2");
}
}
class Drawing extends Art {
public Drawing(){super(3);}//(2)
public Drawing(int i) {
super(4);
System.out.println("Drawing constructor");
}
}
public class E05_Cartoon2 {
public static void main(String args[]) {
new Drawing();//(3)
//new Drawing(3);
}
} ///:~
运行结果:
Art constructor2
如果把标记为(2)处的super(3)删除掉,那么会调用父类的缺省构造器。
运行结果是:
Art constructor1
注意:(2)在子类中的非缺省构造器可以调用父类的缺省/非缺省构造器,在调用父类的缺省构造器
时,不需要super关键字直接可以调用;在调用父类的非缺省构造器时,必须用super(参数)显示
调用。看下面的案例
class Art {
Art()//(1)
{
System.out.println("Art constructor1");
}
Art(int i ) {
System.out.println("Art constructor2");
}
}
class Drawing extends Art {
//public Drawing(){super(4);}//(2)
public Drawing(int i) {
//super(4);//(3)
System.out.println("Drawing constructor");
}
}
public class E05_Cartoon2 {
public static void main(String args[]) {
//new Drawing();//(4)
new Drawing(3);
}
} ///:~
运行结果:
Art constructor1
Drawing constructor
如果把标记为(3)的注释去掉,那么此时就是调用父类的非缺省构造器,
运行结果是:
Art constructor2
Drawing constructor
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhu_apollo/archive/2007/11/09/1875810.aspx