如何在Java中更正此类扩展?

时间:2012-11-13 03:19:22

标签: java class

我正在尝试制作一个包含一个字段的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());




    }

}

我不确定我做错了什么,我为我糟糕的代码道歉,第一次了解课程扩展的主题。

3 个答案:

答案 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或名称。

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

另一个选择是初始化它们(在声明它们时将它们设置为正确)并且你会发现它们还没有被更改。

另外,正如@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;
    }

}