书上有一道题 我做了一下代码如下: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;
}
}问题在代码里用注释写出来了。 我想问的是 为什么还要写一个空的构造方法呢?上面不是已经有了一个有参数的构造方法了么? 谢谢大家!
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;
}
}问题在代码里用注释写出来了。 我想问的是 为什么还要写一个空的构造方法呢?上面不是已经有了一个有参数的构造方法了么? 谢谢大家!
当构造函数重载后,默认构造函数必须写出来.
实际上每个类CLASS都有个默认构造函数CLASS(){}的,只是当构造方法没有重载的情况下是可以省略的.
new Employee()创建Employee类的实例对象时,就不会报错,如果要用到,就要加Employee(){}这个默认的构造方法,因为在程序中定义了一个有参数的构造方法,系统不再自动生成Employee(){}构造方法.
如果是有参的,你依然可以选择系统给你创建一个无参的构造方法,但注意,
如果 Employee em=new Employee(有参数);系统就只会调用有参的构造方法,
如果 Employee em=new 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的,
如上,一点问题都没有