标题: 请教一个问题!! [打印本页] 作者: 胡宝林 时间: 2012-6-9 13:16 标题: 请教一个问题!! public class D {
String s;
public D(String s){
this.s=s;
}
}
class O extends D{
String s="D";
public static void main(String[] args) {
O o=new O();
System.out.println(s);
}
}
//编译报错,不知道错在哪里了作者: 付信榕 时间: 2012-6-9 13:29
public class D {
String s;
public D(String s){
this.s=s;
}
}
class O extends D{
String s="D";
public static void main(String[] args) {
O o=new O();//此句有问题,O是D的子类,O在new对象时,隐式要调用super()父类的无参构造函数。而父类中只有有参数
public D(String s{this.s=s;},而没有无参构造函数了。所以就初始化不成功就报错了。
System.out.println(s);
}
}
解决方法在:public class D {
String s;
public D( ){}//加上此句
第二个问题,你在主函数里面调用了非静态成员。 静态函数只能调用静态成员。
所以你要把String s = "D" 前面加上static作者: 邓杰 时间: 2012-6-9 13:40
你把你的错误提示发出来啊。 作者: 安路凤 时间: 2012-6-9 13:44
你应该学会看异常按照你的写法 运行的时候会抛错误 Error
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Cannot make a static reference to the non-static field s
不能在静态方法里访问非静态的s
将s改为静态后又抛出另一个Error
Exception in thread "main" java.lang.Error: Unresolved compilation problem: //未解决的编译问题
Implicit super constructor D() is undefined for default constructor. Must define an explicit constructor //意思就是你没有明确定义继承父类的构造方法
所以子类必须覆写父类的构造函数——因为子类对象在建立的时候需要查看父类是如何对这些数据初始化的
class O extends D {
public O(String s) {
super(s);
}
static String s="D";
public static void main(String[] args) {
// TODO Auto-generated method stub
O o=new O("");
System.out.println(s);
}
}
这样就正确了