0

name(String)とアクセサーとミューテーターという1つのフィールドを持つPersonクラスを持つプログラムを作成しようとしています。次に、2番目のクラスStudent(Personクラスを拡張)を作成します-1つのフィールド: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

ファイルの先頭にあるパッケージインポートのアドレスが必要なアドレスであることを確認してください。


その他の問題

新しいのIDまたは名前を設定していないことを除いて、一見するとすべて問題ないように見えますStudent

setID入力を取得した後、 andsetNameメソッドを呼び出すと、状況が改善されるはずです。

もう1つのオプションは、それらを初期化すること(宣言されたときに適切なものに設定すること)であり、まだ変更されていないことがわかります。

また、@ 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 に答える