我正在尝试制作一个包含一个字段的Person类的程序:name(String)和accessor和mutator。然后创建第二个类Student(扩展Person类) - 一个字段:id和id的访问器和mutator。然后测试它创建一个对象并分配名称和id并打印出结果。
这是我到目前为止所做的:
人类:
/*
* 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;
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());
}
}
我不确定我做错了什么,我为我糟糕的代码道歉,第一次了解课程扩展的主题。
答案 0 :(得分:2)
我会在你Person
类上创建一个名为...的构造函数。
public class Person {
//...
public Person(String name) {
setName(name);
}
//...
}
这会强制您在创建Person
Student
提供名称
public class Student extends Person {
//...
public Student(String name, int idNumber) {
super(name);
setID(idNumber);
}
//...
}
请注意,我可能还会创建一个提供实施所需基本功能的人员和学生界面,但这可能是一个过分的问题
正如已经开始指出的那样,你的吸气剂不需要参数。
答案 1 :(得分:1)
您的评论描述
person.MainStudentID.main(MainStudentID.java:29)
这意味着你有另一个以某种方式参与这个课程的课程。此错误不是来自您示例中的代码!
您有一个名为MainStudentID.java
的类正在被访问并导致此错误。
我的猜测是,当您说extends Person
时,您已在示例代码中导入MainStudentID
类而不是类。
确保文件顶部的包导入地址是您想要的地址。
其他问题
乍一看,一切看起来都不错,但您没有为新Student
设置ID或名称。
获得输入后调用setID
和setName
方法,事情应该会更好。
另一个选择是初始化它们(在声明它们时将它们设置为正确)并且你会发现它们还没有被更改。
另外,正如@Bernard指出的那样,在你的getXXX
方法中,你不需要参数 - 它们的唯一目的是返回一个字段。它们不适用于任何其他信息。
答案 2 :(得分:1)
您需要在Student构造函数中设置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 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;
}
}