//如:
public class father//父类
{
  public father(String a)
  {
  }
}class son extends father//子类
{
  public son(String b)//只能有这种构造函数吗?
  { 
      super(b);
   }
  public son()//这样为什么编译不能通过?
  {
     String x="test";
     super(x);
   }
}
//以上问题怎么解决?

解决方案 »

  1.   

    public son()//这样为什么编译不能通过?
      {
         String x="test";
         super(x);
       }
    改成
     public son()
      {
         super(x);
         String x="test";   }你必须清楚的一点是,super构造函数永远要在其它的语句之前,否则,父类都没初始化,哪里来的内存可以存放String x呢
      

  2.   

    首先super()必须是第一个语句.
    这个可以:
     class Father//父类
    {
      public Father(String a)
      {
      }
    }public class Test extends Father{
    public static String x="Father";
      public Test(String b)
      { 
          super(b);
       }
      public Test()
      {
              super(x);
       }
    }
      

  3.   

    偶看到书上也是这么说的.  super()  应该放在第一句.
      

  4.   

    public son()
      {
         super(x);
         String x="test";   }
    这样编译能能过吗?x都还没定义怎么传递?public class Test extends Father{
    public static String x="Father";
      public Test(String b)
      { 
          super(b);
       }
      public Test()
      {
              super(x);
       }
    }
    这种方法虽然可以,但为什么我在调用父类的构造函数之前就不能产生其它对象呢?
      

  5.   

    super("text");
    或者 this("text");
      

  6.   

    編譯器強迫子类构造器必須呼叫首先父类的构造器,因为子类只能存取其自身的members,無法存取父类 的private members,唯有父类构造器建構式才可以將父类private members加以初始化.
      

  7.   

    我觉得,你还得好好想想继承以及多态的,基础知识~
    不要着急~~
    当一个类继承另一个类的时候,它调用构造函数,一般是先调用被继承哪个类的构造函数,如果父类中
    没有带参数的构造函数的话,子类会调用默认的构造函数,就不许要Super(b);
    如果你的父类有带参数的构造函数的话,这个带参数的构造函数就会覆盖默认的构造函数,这样,你的子类就必须会去调用带有参数的父类的构造函数。这样就需要Super(b)啦!
      

  8.   

    呵呵,这个是java的规范。
    子类实例话的时候首先要实例话父类构造函数呀。
    父类只有带参数的构造函数,那子类当然要使用super(xxx)来初始化。