这是一道用继承显示专业医生和非专业医生的信息题.
有个问题需要大家指导一下.
运行总是出现这种错误:Exception in thread "main" java.lang.NosuchMethodError:main
代码如下:
class Doctor
{
String name;
int idNumber;
String address;
Doctor(String name1,int id,String addr)
{
name=name1;
idNumber=id;
address=addr;
}
void show()
{
System.out.println("姓名:"+name);
System.out.println("编号:"+idNumber);
System.out.println("地址:"+address);
}
}
class NonSpecialist extends Doctor
{
NonSpecialist(){}
NonSpecialist(String name1,int id,String addr)
{
super(name1,id,addr);
}
void show()
{
super.show();
}
}
class Specialist extends Doctor
{
String zhuanye;
Specialist(){}
Specialist(String name1,int id,String addr,String zy)
{
super(name1,id,addr);
zhuanye=zy;
}
void show()
{
super.show();
System.out.println("专业:");
}
}
class Zhu
{
Zhu(){}
public static void main(String[] args)
{
Specialist s = new Specialist("张三",01,"四川省","医生");
System.out.println("专业医生");
s.show();
NonSpecialist n=new NonSpecialist("李四",02,"广东省");
System.out.println("非专业医生");
n.show();
}
}
请大家帮帮我!
我刚学没多久.
谢谢大家了!
----------------解决方案--------------------------------------------------------
在类Doctor中加一个构造方法 doctor(){}
在NonSpecialist加载进内存时会调用父类的构造函数
此程序在编译的时候就应该有错
----------------解决方案--------------------------------------------------------
最好都写一个无参的构造方法,保险
----------------解决方案--------------------------------------------------------
这是更改后的代码:
class Doctor
{
String name;
int idNumber;
String address;
Doctor(){}
Doctor(String name1,int id,String addr)
{
name=name1;
idNumber=id;
address=addr;
}
void show()
{
System.out.println("姓名:"+name);
System.out.println("编号:"+idNumber);
System.out.println("地址:"+address);
}
}
class NonSpecialist extends Doctor
{
NonSpecialist(){}
NonSpecialist(String name1,int id,String addr)
{
super(name1,id,addr);
}
void show()
{
super.show();
}
}
class Specialist extends Doctor
{
String zhuanye;
Specialist(){}
Specialist(String name1,int id,String addr,String zy)
{
super(name1,id,addr);
zhuanye=zy;
}
void show()
{
super.show();
System.out.println("专业:");
}
}
class Zhu
{
Zhu(){}
public static void main(String[] args)
{
Specialist s = new Specialist("张三",01,"四川省","医生");
System.out.println("专业医生");
s.show();
NonSpecialist n=new NonSpecialist("李四",02,"广东省");
System.out.println("非专业医生");
n.show();
}
}
还是一样的错误!
再请教.
----------------解决方案--------------------------------------------------------
构造函数的前面加个public试试,再不行把Zhu(){}
去掉
----------------解决方案--------------------------------------------------------
奇怪嘛,你修改后的程序在我的电脑上运行没有问题的啊,我用的是Eclipse3.2
----------------解决方案--------------------------------------------------------
还有个方法就是把所有类的无参构造方法都去掉,只要你创建对象的时候不调用无参构造方法的话就可以,否则还是会出现找不到无参构造方法的错误
----------------解决方案--------------------------------------------------------
我上面也没错 我用的是jbuilder
----------------解决方案--------------------------------------------------------
给Doctor加个默认的构造方法就OK了 原因是如果子类的构造器没有显示的调用超类(父类)的构造器 则将自动调用超类默认的的构造器 如果超类没有不带参数的构造器 并在子类的构造器中又没有显示的调用超类的其他构造器 编译器就会报错
----------------解决方案--------------------------------------------------------
修改后的应该没问题
----------------解决方案--------------------------------------------------------