如何在Java中更正这个类扩展?

如何在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

我正在尝试创建一个程序,该程序有一个Person类和一个字段:name(String)、accessor和mutator。然后生成第二个类Student(extensedperson类)-一个字段: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;

/**
 *
 * @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)