1

質問の言い回しが苦手なのに、これまでのところ非常に役に立ちました。自分が何をしているのかはほぼわかっていると思いますが、ゲッター、セッター、コンストラクターの関係について頭を悩ませようとしています。次の2つのクラスが StudentありName、ゲッターとセッターおよびコンストラクターのパラメーター間の関係について混乱しています。

Nameコンストラクターからパラメーターを削除すると、つまりこれ

public Name (){
this.firstName = firstName;
this.lastName = lastName;

そしてasloはこれを反映するようにStudentコンストラクターを編集しました

public Student(int id, String firstName, String lastName, String street, String area, String city, String country, int age, char gender, String college, String course,  int level, int gradePointAverage){ //This is the list of variables called from the Student class
this.id = id;
this.name = new Name(); //I have removed the parameters here
this.name.setFirstName(firstName);
this.name.setLastName(lastName);
this.address = new Address(street, area, city, country);
this.age = age;
this.gender = gender;
this.college = college;
this.course = course;
this.level = level;
this.gradePointAverage = gradePointAverage; 

}

それがどのような影響を与えるかはわかりません。誰かが私にパラメータを持っているべき/持ってはいけない場所とその理由を説明してくれるととても素晴らしいです。この概念を理解することで、現時点でコーディングをこれ以上進めることができなくなります。

public class Student {
    private Name name; // This is calling from the Name class, giving it the name 'name'
    private Address address; // This calls from Address, giving it the name 'address'

    private char gender;

    private String course, college;

    private int gradePointAverage, id, age, level;

    public Student(int id, String firstName, String lastName, String street, String area, String city, String country, int age, char gender, String college, String course,  int level, int gradePointAverage){ //This is the list of variables called from the Student class
        this.id = id;
        this.name = new Name(firstName, lastName);
        //this.name = new Name();
        this.name.setFirstName(firstName);
        this.name.setLastName(lastName);
        this.address = new Address(street, area, city, country);
        this.age = age;
        this.gender = gender;
        this.college = college;
        this.course = course;
        this.level = level;
        this.gradePointAverage = gradePointAverage;
    }

    public int getId(){
        return id;
    }

    public String getName(){
        return name.toString();
    }

    public String getAddress(){
        return address.toString();
    }

    public int getAge(){
        return age;
    }

    public char getGender(){
        return gender;
    }

    public String getCollege(){
        return college;
    }

    public int getLevel() {
        return level;
    }

     public String getCourse() {
        return course;
    }

    public int getGradePointAverage() {
        return gradePointAverage;
    }

    public void printStudent() {
        System.out.println("The Student " + name.toString() + " is logged under the student ID number " + id + ".");
        System.out.println("They live at " + address.toString() + " and their age is " + age + ".");
        System.out.println("Their gender is " + gender + ".");
        System.out.println("The student studies at " + college + " attending classes in " + course + ".");
        System.out.println("Their level is " + level + " and the student grade average in points is " + gradePointAverage + ".");
        System.out.println();
    }

}

Name

public class Name{

private String firstName, lastName;

public Name (String firstName, String lastName){
//public Name (){
    this.firstName = firstName;
    this.lastName = lastName;
}

public void setFirstName(String firstName){
    this.firstName = firstName;
}

public void setLastName(String lastName){
    this.lastName = lastName;
}

//public String getFirstName() {
//  return firstName;
//}

//public String getLastName() {
//  return lastName;
//}

///** Returns first name concatenated to last name */
//public String toString() {
//  return firstName + " " + lastName;
//}

}
4

1 に答える 1

5

これらconstructorsは、オブジェクトのインスタンスを初期化して、オブジェクトの状態に必要なすべての最小量のデータがvalid作成時に提供されるようにするためのものです。

あなたの場合Nameconstructorそれが必要firstNameであり、それらがオブジェクトを完全に初期化lastNameするものであるためです。Nameこのオブジェクトは、Address表示したオブジェクトと同じように機能するはずです。

それ以外の場合、setXXXメソッドを使用すると、Nameオブジェクトは不完全であり、2つのStringオブジェクトが初期化されてnullいるか、その他の未定義の状態になっています。

于 2012-08-05T16:56:49.973 に答える