无法将类 Student中的构造器 Student应用到给定类型

Alaskayo 2020-03-23 09:35:46
Undergraduate.java:11: 错误: 无法将类 Student中的构造器 Student应用到给定类型;
public Undergraduate(String ID,String classID,String name,String gender,String age){
^
需要: String,String,String,String,String
找到: 没有参数
原因: 实际参数列表和形式参数列表长度不同


代码:
package student;

//学生类
public class Student
{
private int count;
private String ID; //学号
private String classID; //班号
private String name; //姓名
private String gender; //性别
private String age; //年龄

public Student(String ID,String classID,String name,String gender,String age){ //构造函数
this.ID = ID;
this.classID = classID;
this.name = name;
this.gender = gender;
this.age = age;
count++; //记录生成学生个数
}

//获取值
public String getID(){
return ID;
}
public String getClassID(){
return classID;
}
public String getName(){
return name;
}
public String getGender(){
return gender;
}
public String getAge(){
return age;
}

//修改值
public void setID(String ID){
this.ID=ID;
}
public void setClassID(String classID){
this.classID=classID;
}
public void setName(String name){
this.name=name;
}
public void setGender(String gender){
this.gender=gender;
}
public void setAge(String age){
this.age=age;
}

public String toString(String ID,String classID,String name,String gender,String age){
String str=null;
str="学号:"+ID;
str+="\t班号:"+classID;
str="\t姓名:"+name;
str="\t性别:"+gender;
str="\t年龄:"+age;
return str;
}

public void show(String str){
System.out.println(str);
}

}






import student.*;

public class Undergraduate extends Student
{
/* */
private String ID; //学号
private String classID; //班号
private String name; //姓名
private String gender; //性别
private String age; //年龄

public Undergraduate(String ID,String classID,String name,String gender,String age){
this.ID = ID;
this.classID = classID;
this.name = name;
this.gender = gender;
this.age = age;
}



public void show(){
System.out.println("degree:Undergraduate");
}

}





...全文
3012 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Little5 2020-03-25
  • 打赏
  • 举报
回复
父类子类的函数名、返回值和参数都一样,叫重写。 在同一个类中,函数名一样,参数不一样,叫重载。 toString方法是Object类的方法。所有java类都是Object类的子类。你要写toString方法,像我那样就算重写。如果加了参数或者改了返回值类型,那就是你自己定义的函数了。
Alaskayo 2020-03-25
  • 打赏
  • 举报
回复
引用 1 楼 Little5 的回复:
子类初始化的时候,如果不指定调用父类的某个构造,则需要调用父类的无参构造。你父类的构造是有参构造。会把默认的无参构造覆盖掉。所以编译会报错。 要么在父类加一个无参构造
	public Student()
	{
		//父类无参构造
	}
要么在子类中用super显式指定调用哪个父类构造
public Undergraduate(String ID, String classID, String name, String gender, String age)
	{
		super(ID, classID, name, gender, age);
		// 下面初始化子类特有属性(若有)
	}
还有,如果你是想重写toString方法的话,那你就写错了。
public String toString()
	{
		String str = null;
		str = "学号:" + ID;
		str += "\t班号:" + classID;
		str += "\t姓名:" + name;
		str += "\t性别:" + gender;
		str += "\t年龄:" + age;
		return str;
	}
感谢解释,请问后来我在undergraduate类里新加了和student类里一样的toString函数,是想要在两个类中声明同名的方法,不是重写,应该没问题吧?
Little5 2020-03-24
  • 打赏
  • 举报
回复
子类初始化的时候,如果不指定调用父类的某个构造,则需要调用父类的无参构造。你父类的构造是有参构造。会把默认的无参构造覆盖掉。所以编译会报错。 要么在父类加一个无参构造
	public Student()
	{
		//父类无参构造
	}
要么在子类中用super显式指定调用哪个父类构造
public Undergraduate(String ID, String classID, String name, String gender, String age)
	{
		super(ID, classID, name, gender, age);
		// 下面初始化子类特有属性(若有)
	}
还有,如果你是想重写toString方法的话,那你就写错了。
public String toString()
	{
		String str = null;
		str = "学号:" + ID;
		str += "\t班号:" + classID;
		str += "\t姓名:" + name;
		str += "\t性别:" + gender;
		str += "\t年龄:" + age;
		return str;
	}

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧