SCJP中的一道小题不懂.
class Super{
public int i=0;
public Super(String text){
i=1;
}
}
public class Sub extends Super{
public Sub(String text){
i=2;
}
public static void main(String args[]){
Sub sub=new Sub( "Hello ");
System.out.println(sub.i);
}
}
what is the result?
A. compile will fail
B. compile success and print "0 "
C. compile success and print "1 "
D. compile success and print "2 "
选什么啊.谢谢.最好能解释下.
------解决方案--------------------干吗不运行一下
------解决方案--------------------父类没有默认构造方法,子类要显示调用
------解决方案--------------------如果想考SCJP建议你看JAVA2学习指南.我就是看的那个.
------解决方案--------------------在调用子类的构造函数时先调用父类的默认构造函数,
------解决方案--------------------假设A是B的父类,B是A的子类。
1、如果程序员没有给类A没有提供构造函数,则编译器会自动提供一个默认的无参数的构造函数,如果用户提供了自己的构造函数,则编译器就不在提供默认的无参数构造函数。
2、子类B实例化时会自动调用父类A的默认构造函数,所以如果A的默认的无参数的构造函数为private,则编译器会报错,而如果A没有提供默认的无参数的构造函数,而提供了其他类型的构造函数,编译器同样会报错,因为B找不到A的默认无参数构造函数。所以,我们最好给父类A提供一个无参数的构造函数。
3、或者在B的构造函数中显示的调用父类A的有参构造函数。super(parameter)
------解决方案--------------------学习了,up
------解决方案--------------------在子类的构造方法中第一句应该是super(text);先显示的指定要调用的父类的构造方法。
结贴是个好习惯,谢谢。
------解决方案--------------------来晚了 帮顶一下!!!
------解决方案--------------------去了解下构造一个类时方法的调用顺序就明白了
------解决方案--------------------楼主想考SCJP,最基本的问题一定要懂啊
如果父类只有带参数的构造函数
那么子类的构造函数的第一行必须明确调用
------解决方案--------------------学习了
------解决方案--------------------编译错误。因为父类重写了一个构造方法,把原来的无参数的构造方法给覆盖了,
子类继承父类的构造方法默认是继承无参数的,现在父类没有,子类在实例话的时候,要先调用父类的构造方法 ,现在父类无参数的方法没有 所以 编译错误
------解决方案--------------------学习了