当前位置: 技术问答>java相关
为何不能编译?
来源: 互联网 发布时间:2015-05-07
本文导语: 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); } } ...
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);
}
}
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);
}
}
|
因为系统会自动在子类构造函数的第一句隐示加super();
除非子类构造函数这有this()或super()。
public Sub(String text){
//系统自动增加super();
i=2;
}
然而,你在父类中显示定义了带参数的构造函数,默认的构造函数自动取消,
所以这里系统找不到super(),编译出错。
你可以自己在子类构造函数的第一句添加super(text),
这样系统就不会再加super()了。
除非子类构造函数这有this()或super()。
public Sub(String text){
//系统自动增加super();
i=2;
}
然而,你在父类中显示定义了带参数的构造函数,默认的构造函数自动取消,
所以这里系统找不到super(),编译出错。
你可以自己在子类构造函数的第一句添加super(text),
这样系统就不会再加super()了。
|
看了一下,应该这么改
class Super{
public int i=0;
public Super(String text){
i=1;
}
}
public class Sub extends Super{
public Sub(String text){
//增加
super(text)
i=2;
}
public static void main(String args[]){
Sub sub=new Sub("Hello");
System.out.println(sub.i);
}
}
class Super{
public int i=0;
public Super(String text){
i=1;
}
}
public class Sub extends Super{
public Sub(String text){
//增加
super(text)
i=2;
}
public static void main(String args[]){
Sub sub=new Sub("Hello");
System.out.println(sub.i);
}
}