书上有一道题 我做了一下代码如下:public class Employee {
    String name;
    float basic;
    String address;
    
    void show()
    {
        System.out.println("姓名:"+name);
        System.out.println("新资:"+basic);
        System.out.println("住址:"+address);
    }
    Employee(String xingming,float jichu,String zhuzhi)
    {
        name=xingming;
        basic=jichu;
        address=zhuzhi;
    }
    Employee()  //为什么要有这个?  。。这里问题就在这里
    {
    
    }
    public static void main(String[] args) {
        Manager jingli=new Manager("Henry",5500.65f,"Sydney","会计部");
        Director jingli2=new Director("Stephen",32564.0f,"New York",8000.0f);
        
        System.out.println("经理详细信息");
        System.out.println("============================");
        System.out.println("");
        jingli.show();
        System.out.println("");
        
        System.out.println("经理详细信息");
        System.out.println("============================");
        System.out.println("");
        jingli2.show();
      
    }
}class Manager extends Employee
{
    String department;
    Manager(String xingming,float jichu,String zhuzhi,String bumen)
    {
        super(xingming,jichu,zhuzhi);
        department=bumen;
    }
}class Director extends Employee
{
    float transportAllowance;
    
    Director(String xingming,float jichu,String zhuzhi,float trans)
    {
        super(xingming,jichu,zhuzhi);
        transportAllowance=trans;
    }
}问题在代码里用注释写出来了。 我想问的是 为什么还要写一个空的构造方法呢?上面不是已经有了一个有参数的构造方法了么? 谢谢大家!

解决方案 »

  1.   

    因为你写了Employee(String xingming,float jichu,String zhuzhi)
    当构造函数重载后,默认构造函数必须写出来.
    实际上每个类CLASS都有个默认构造函数CLASS(){}的,只是当构造方法没有重载的情况下是可以省略的.
      

  2.   

    哈哈这个问题我知道在这学了这么多天了也终于能回答一些简单的问题了这是一个无参的构造函数当你用构造函数初始化的时候JAVA会自动判断你的参数而调用相应的构造函数你这个无参的构造函数是可有可无的但如果你在调用这个无参的构造函数时  你的参数将无法被初始化所以程序会出现异常
      

  3.   

    你说的重载是不是super那里?
      

  4.   

    overlv()  可是我根本没有调用无参的构造方法啊
      

  5.   

    怎么我编译没有报错,去掉那个默认的构造函数!如果不调用
    new Employee()创建Employee类的实例对象时,就不会报错,如果要用到,就要加Employee(){}这个默认的构造方法,因为在程序中定义了一个有参数的构造方法,系统不再自动生成Employee(){}构造方法.
      

  6.   

    当你做一个类的时候,类中就会有一个默认的无参构造方法,这时必须的,在Jbuilder2006中,这个构造方法会为你自动创建,当然你也可以自己构造方法,如果你自己写了构造方法,如果该方法是无参的,系统就不会在去为你创建无参的构造方法。
    如果是有参的,你依然可以选择系统给你创建一个无参的构造方法,但注意,
      如果  Employee em=new Employee(有参数);系统就只会调用有参的构造方法,
    如果    Employee em=new Employee();系统就只会调用无参的构造方法。
      

  7.   

    兄弟你把Employee()注释掉 程序一样运行 但是你改动一处,比如说把Director(String xingming,float jichu,String zhuzhi,float trans)改成Director(),这个时候程序就运行不了了,因为缺少构造函数。这样会使程序更加健壮。
      

  8.   

    这个问题我回答过无数遍了。仔细学习一下Default Constructor相关章节吧。
      

  9.   

    rockay2006(此处无名胜有声) 
    晕了
    我这里注释掉根本就不行 出错了。 我一直在问为什么要有这个呢。
      

  10.   

    public class Employee {
        String name;
        float basic;
        String address;
        
        void show()
        {
            System.out.println("姓名:"+name);
            System.out.println("新资:"+basic);
            System.out.println("住址:"+address);
        }
        Employee(String xingming,float jichu,String zhuzhi)
        {
            name=xingming;
            basic=jichu;
            address=zhuzhi;
        }
       
        public static void main(String[] args) {
            Manager jingli=new Manager("Henry",5500.65f,"Sydney","会计部");
            Director jingli2=new Director("Stephen",32564.0f,"New York",8000.0f);
            
            System.out.println("经理详细信息");
            System.out.println("============================");
            System.out.println("");
            jingli.show();
            System.out.println("");
            
            System.out.println("经理详细信息");
            System.out.println("============================");
            System.out.println("");
            jingli2.show();
          
        }
    }class Manager extends Employee
    {
        String department;
        Manager(String xingming,float jichu,String zhuzhi,String bumen)
        {
            super(xingming,jichu,zhuzhi);
            department=bumen;
        }
    }class Director extends Employee
    {
        float transportAllowance;
        
        Director(String xingming,float jichu,String zhuzhi,float trans)
        {
            super(xingming,jichu,zhuzhi);
            transportAllowance=trans;
        }
    }
    F:\javaclass\csdn>javac Employee.javaF:\javaclass\csdn>java Employee
    经理详细信息
    ============================姓名:Henry
    新资:5500.65
    住址:Sydney经理详细信息
    ============================姓名:Stephen
    新资:32564.0
    住址:New York
    不知道楼主说的是怎么回事,我把那一段去掉了,也没有出错呀,
    是不是你jdk有问题呀,我的是jdk1.6的,
    如上,一点问题都没有