最近碰到一个问题
   构造函数前面可以加void修饰吗?看到很多文章讲都说不可以,但我在eclipse里就可以啊!
   代码如下:
    public class Father {
public String name;

public  Father(String name){
this.name = name;
}
    }    class Daughter extends Father{

    }  此时编译报错,会提示“Implicit super constructor Father() is undefined for default constructor. Must define an  explicit constructor”
  但如果将代码改为:
    public class Father {
public String name;

public void Father(String name){
this.name = name;
}
    }    class Daughter extends Father{

    }
   很简单就是在构造函数前面加了个void, 就可以通过编译,可以运行了!
    请大家帮忙分析一下!   
    

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【yingrihong】截止到2008-06-23 17:03:14的历史汇总数据(不包括此帖):
    发帖数:1                  发帖分:20                 
    结贴数:1                  结贴分:20                 
    未结数:0                  未结分:0                  
    结贴率:100.00%            结分率:100.00%            
    敬礼!
      

  2.   

    首先说明构造函数是没有返回值类型的包括void报错原因很简单父类没有默认构造函数,而子类却会用到
    public class Father {
    public String name;public  Father(String name){
    this.name = name;
    }
    public Father(){};
        }    class Daughter extends Father{
        } 
      

  3.   

    这样也可以public class Father {
    public String name;public  Father(String name){
    this.name = name;
    }
    public Father(){};
        }    class Daughter extends Father{
    public Daughter (){};
    public Daughter (String name){};
        } 
      

  4.   

    public void Father(String name){ 
    this.name = name; 
    } 但是你这个就不是构造函数了是不是构造函数 并不是单单由方法名决定的 还要有更重要的是要没有返回类型
     
      

  5.   

    public void  Father(String name){ 
    this.name = name; 

    已经不是构造函数了所以继承不会出错了
      

  6.   

    看了你的帖子,小郁闷一下,Java书包括C++的书都很清楚地说构造函数"不能"有返回类型,难道我错了第一次错误:
    此时编译报错,会提示“Implicit super constructor Father() is undefined for default constructor. Must define an  explicit constructor”因为
    public  Father(String name){ 
    this.name = name; 

    是一个合法的构造函数,但是因为Daughter extends Father,缺省有一个无参的构造函数(你可以 new Daughter()),但是这个无参的构造函数同时也就要求父类有一个无参的构造函数。
    注意一个问题:此时Father类中已经有了一个带String 参数的构造函数,那么就只有这一个构造函数了!!所以报的错误是 constructor Father() is undefined  构造函数未定义(没有参数的)
    你调整代码之后,在Father(String )前面加了一个返回类型void,其实你还可以加其他类型,在函数内部返回相应的值,已经不是一个构造函数了。你可以写出这样的代码
    new Father().Father("adkjahsd");但是下面的就是非法的:
    new Father("adkjahsd");
    说清楚没有????
    不过我了解到一点:构造函数和普通方法之间可以重载,哈哈
      

  7.   

    public class Father
    {
        public String name;    public Father(String name)
        {
            this.name = name;
        }
    }
    class Daughter extends Father
    {
        public Daughter(String name)
        {
            super(name);
        }
    }
      

  8.   

    public void Father(String name){
    this.name = name;
    }
        } 
     lz的这个方法已经不是构造方法了,它变成了 一个普通的成员方法。也就是说LZ并没有编写构造方法代码。
      

  9.   

    1. 你出的错:
    如果一个类没定义构造函数 他会有一个默认的无参构造函数
    但是如果定义了有参数的构造函数,他就不会有默认的无参构造函数你的错误中 子类有默认的无参构造函数 
    初始化子类实例会调用父类无参构造函数
    而此时父类没有 就报错了2. 当你加了void Father()就不是构造函数而是普通函数
    它就会有默认的构造函数 所以子类不会报错
      

  10.   

    很简单的问题。首先要知道,java中关于构造函数的定义。。
    第二,函数名称的声明,他并没有说不能跟类名相同。o(∩_∩)o...