日期:2014-05-20  浏览次数:20763 次

关于构造器继承的问题
写个简单的程序说一下:
class Test{
  public String name;
  public Test(String name){
  this.name=name;
}
}
class Test1 extends Test{
  public Test1(){
  super(name)
}
}
  这种继承的时候会报错,name必须是static,但是如果name是static的话,构建的变量就成了类变量,无法对对象进行不同的赋值了,Test中所有的对象的name属性就都一样了 。
  这个问题怎么解决啊,既要继承父类带有参数的构造器,又要保证name是一个实例变量,而不是类变量!

------解决方案--------------------
逻辑错误
构造方法就是为了给对象的变量赋值的
在new一个对象时,会调用其构造方法
你写的这个构造方法会先调用super(name),而此时name是父类对象,但是name尚未赋值,用尚未赋值的变量去调用Test(String name)这个构造方法当然会出错
LZ的Test1的构造方法少些了个参数吧!应该是public Test1(String name)
------解决方案--------------------
Java code
class Test{
  public String name;
  public Test(String name){
  this.name=name;
}
}
class Test1 extends Test{
  public Test1(){
  super(null); //不知道LZ什么目的,
  //在父类构造方法调用结束以前,不允许访问父类属性,
  //因为父类构造方法没有执行结束,父类对象还没有被创建,还是null,所以自然不能如果调用
  //既然初始化时父类的name也会是null(没有被赋值的时候),所以索性传个null进去好了
}
}