0

我正在尝试制作具有一个带有一个字段的 Person 类的程序:名称(字符串)以及访问器和修改器。然后制作第二个学生类(扩展个人类)-一个字段:id和id的访问器和修改器。然后对其进行测试,创建一个对象并分配名称和 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());




    }

}

我不确定我做错了什么,我为我的糟糕代码道歉,这是第一次学习类扩展的主题。

4

3 回答 3

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);
    }
    //...
}

请注意,我可能还会创建一个人员和学生界面,以提供实现所需的基本功能,但这对于这个问题来说可能是多余的

正如已经开始指出的那样,您的吸气剂不需要参数。

于 2012-11-13T03:30:04.200 回答
1

你的评论描述

person.MainStudentID.main(MainStudentID.java:29)

这意味着您有另一个课程以某种方式参与了这一课程。此错误不是来自您示例中的代码!

您有一个名为MainStudentID.java的类正在被访问并导致此错误。

我的猜测是,当您说 时extends Person,您已经在示例代码中导入了MainStudentID类而不是类。

确保文件顶部的包导入地址是您想要的。


其他问题

乍一看一切正常,只是您没有为新的Student.

获得输入后调用setIDand方法,事情应该会更好。setName

另一种选择是初始化它们(在声明它们时将它们设置为正确的值),您会看到它们尚未更改。

此外,正如@Bernard 指出的那样,在您的getXXX方法中,您不需要参数 - 它们的唯一目的是返回一个字段。它们不适用于任何其他信息。

于 2012-11-13T03:25:49.590 回答
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;
    }

}
于 2012-11-13T03:27:42.343 回答