如何在Java中更正这个类扩展?
我正在尝试创建一个程序,该程序有一个Person类和一个字段:name(String)、accessor和mutator。然后生成第二个类Student(extensedperson类)-一个字段:id和id的访问器和变异器。然后为了测试它,生成一个对象,分配名称和id,并打印出结果 这就是我到目前为止所做的: 人员类别:如何在Java中更正这个类扩展?,java,class,Java,Class,我正在尝试创建一个程序,该程序有一个Person类和一个字段:name(String)、accessor和mutator。然后生成第二个类Student(extensedperson类)-一个字段:id和id的访问器和变异器。然后为了测试它,生成一个对象,分配名称和id,并打印出结果 这就是我到目前为止所做的: 人员类别: /* * To change this template, choose Tools | Templates * and open the template in the
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package person;
/**
*
* @author Administrator
*/
public class Person {
/**
* @param args the command line arguments
*/
private String name;
public void setName(String n)
{
name = n;
}
public String getName(String n)
{
return name;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package person;
/**
*
* @author Administrator
*/
public class Person {
/**
* @param args the command line arguments
*/
private String name;
public Person(String n)
{
name = n;
}
public void setName(String n)
{
name = n;
}
public String getName()
{
return name;
}
}
学生班//我想这是一个有扩展名的班:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package person;
public class Student extends Person {
public int idNumber;
Student(String name, int idNumber) {
}
public void setID(int id)
{
idNumber = id;
}
public int getID(int id)
{
return idNumber;
}
}
然后是测试结果的主类:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package person;
import java.util.Scanner;
/**
*
* @author Administrator
*/
public class MainStudentID {
public static void main(String[] args)
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter Students name: ");
String name = keyboard.nextLine();
System.out.println("Enter Students ID Number:");
int idNumber = keyboard.nextInt();
Student Student = new Student(name, idNumber);
System.out.println("Your name is: " + Student.person.getName());
System.out.println("Your id Number is: " + Student.Student.getID());
}
}
我不确定我做错了什么,我为我第一次学习类扩展这个主题的蹩脚代码道歉。您的评论描述了
person.MainStudentID.main(MainStudentID.java:29)
这意味着你有另一个类,不知何故参与了这一个。此错误不是来自示例中的代码
您有一个名为MainStudentID.java
的类正在被访问并导致此错误
我的猜测是,当您说extensedperson
时,您已经导入了MainStudentID
类,而不是示例代码中的类
确保文件顶部的包导入地址是您想要的地址
其他问题 乍一看一切正常,只是你没有为你的新
学生设置ID或姓名
在获得输入后调用setID
和setName
方法,事情应该会更好
另一个选项是初始化它们(在声明它们时将它们设置为正确的值),您将看到它们尚未更改
另外,正如@Bernard所指出的,在getXXX
方法中,您不需要参数——它们的唯一目的是返回一个字段。它们不能处理任何其他信息。您的评论描述了
person.MainStudentID.main(MainStudentID.java:29)
这意味着你有另一个类,不知何故参与了这一个。此错误不是来自示例中的代码
您有一个名为MainStudentID.java
的类正在被访问并导致此错误
我的猜测是,当您说extensedperson
时,您已经导入了MainStudentID
类,而不是示例代码中的类
确保文件顶部的包导入地址是您想要的地址
其他问题
乍一看一切正常,只是你没有为你的新学生设置ID或姓名
在获得输入后调用setID
和setName
方法,事情应该会更好
另一个选项是初始化它们(在声明它们时将它们设置为正确的值),您将看到它们尚未更改
另外,正如@Bernard所指出的,在getXXX
方法中,您不需要参数——它们的唯一目的是返回一个字段。它们不能处理任何其他信息。您需要在学生构造函数中设置name和id的值。您没有存储它们,这就是您在尝试打印时无法获得结果的原因
您还需要去掉get方法中的参数
人员类别:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package person;
/**
*
* @author Administrator
*/
public class Person {
/**
* @param args the command line arguments
*/
private String name;
public void setName(String n)
{
name = n;
}
public String getName(String n)
{
return name;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package person;
/**
*
* @author Administrator
*/
public class Person {
/**
* @param args the command line arguments
*/
private String name;
public Person(String n)
{
name = n;
}
public void setName(String n)
{
name = n;
}
public String getName()
{
return name;
}
}
学生班
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package person;
public class Student extends Person {
public int idNumber;
Student(String name, int idNumber) {
super(name);
this.idNumber = idNumber;
}
public void setID(int id)
{
idNumber = id;
}
public int getID()
{
return idNumber;
}
}
您需要在学生构造函数中设置name和id的值。您没有存储它们,这就是您在尝试打印时无法获得结果的原因
您还需要去掉get方法中的参数
人员类别:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package person;
/**
*
* @author Administrator
*/
public class Person {
/**
* @param args the command line arguments
*/
private String name;
public void setName(String n)
{
name = n;
}
public String getName(String n)
{
return name;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package person;
/**
*
* @author Administrator
*/
public class Person {
/**
* @param args the command line arguments
*/
private String name;
public Person(String n)
{
name = n;
}
public void setName(String n)
{
name = n;
}
public String getName()
{
return name;
}
}
学生班
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package person;
public class Student extends Person {
public int idNumber;
Student(String name, int idNumber) {
super(name);
this.idNumber = idNumber;
}
public void setID(int id)
{
idNumber = id;
}
public int getID()
{
return idNumber;
}
}
我会在你的Person
类上创建一个构造函数,它的名字是
public class Person {
//...
public Person(String name) {
setName(name);
}
//...
}
这将迫使您在创建学生
public class Student extends Person {
//...
public Student(String name, int idNumber) {
super(name);
setID(idNumber);
}
//...
}
请注意,我可能还会创建一个person和student界面,提供实现所需的基本功能,但对于这个问题来说,这可能有些过头了
正如begin所指出的,你的getter不需要参数。我会在你的Person
类上创建一个构造函数,它的名字是
public class Person {
//...
public Person(String name) {
setName(name);
}
//...
}
这将迫使您在创建学生
public class Student extends Person {
//...
public Student(String name, int idNumber) {
super(name);
setID(idNumber);
}
//...
}
请注意,我可能还会创建一个person和student界面,提供实现所需的基本功能,但对于这个问题来说,这可能有些过头了
正如贝京已经指出的,getter不需要参数。您的getXXX()
方法不需要参数。你甚至都没有用它们!我不知道为什么我的打印结果会出错。“运行:输入学生姓名:Ryan Smith输入学生ID号:4555321线程异常”main“java.lang.RuntimeException:不可编译源代码-错误树类型:at person.MainStudentID.main(MainStudentID.java:29)java结果:1生成成功(总时间:11秒)”@user1819827-请参阅我的更新,由于您的错误消息,问题现在更加清楚了。您的getXXX()
方法不需要参数。你甚至都没有用它们!我不知道为什么我的打印结果会出错。“运行:输入学生姓名:Ryan Smith输入学生ID号:4555321线程异常”main“java.lang.RuntimeException:不可编译源代码-错误树类型:at person.MainStudentID.main(MainStudentID.java:29)java结果:1生成成功(总时间:11秒)”@user1819827-请参阅我的更新,由于您的错误消息,问题现在更清楚了。所以您的意思是像调用'code'Student.setName();'code'和'code'Person.setID'code'@Steve?是的,除了传递name
字段:Student.setName(name)
该setName
方法需要一个新名称,它会说“好的,很好,我会设置它,只要告诉我该设置什么”。ID也是一样。所以你的意思是像“code”Student.setName()一样调用它们;'code'和'code'Person.setID'code'@Steve?是,除了传递name
字段:Student.setName(name)