2016-05-10 4 views
0

以下のコードで私はすでにその部屋= rと宣言しています。サブジェクト= s;時間= tである。私の講師は、部屋のテーマと時間にsetメソッドを追加するよう具体的に尋ねましたが、私がコメントアウトしてもそれが機能するように冗長なコードです。定義済みコンストラクタが使用されていない場合にのみ、setメソッドをインクルードする必要がありますか?彼らに方法を設定させる利点は何ですか?属性が既に定義済みコンストラクターで定義されている場合、setメソッドを使用する上で重要なのは何ですか?

class LectureTest{ 
public static void main (String [] args){ 

Lecture l1 = new Lecture(140, "Comp", 5); 
l1.display(); 

Lecture l2 = new Lecture(280, "Sports", 3); 
l2.display(); 

Lecture l3 = new Lecture(101, "Business", 5); 
l3.display(); 

Lecture l4 = new Lecture(360, "Shooting", 4); 
l4.display(); 

Lecture l5 = new Lecture(); 
l5.display(); 

} 
}//end of LectureTest 

class Lecture{ 
private int room; 
private String subject; 
private int time; 

Lecture(int r, String s, int t){ 
    room = r; 
    subject = s; 
    time = t; 
    } 

Lecture(){} 

public void setroomNumber(int r){ 
    room = r; 
} 
public void setSubject(String s){ 
    subject = s; 
} 
public void setTime(int t){ 
    time = t; 
} 
public int getroomNumber(){ 
    return room; 
} 
public String getSubject(){ 
    return subject; 
} 
public int getTime(){ 
    return time; 
} 

    public void display(){ 
    System.out.printf("\n" + "Room Number: " + getroomNumber() + "\n" +  "Subject: " + getSubject() + "\n" + "Time " + getTime() + "\n"); 
    } 
} 
+0

をテストする場合はSO私は構文エラーがので、注意... IDEを使用していなかったかもしれない、あなたが道を必要とするこのフォーラムにこのすべてをDIDそれを突然変異させる。 – azurefrog

答えて

0

コンストラクタは値を初期化します。

public class Person { 
    public String name; 
    public int age; 

    public Person (String name, int age) { 
     this.name = name; 
     this.age = age; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public void setAge(int age) { 
     this.age = age; 
    } 

    public String toString() { 
     String str; 
     str = "My name is "+name+" and I am "+age+" years old!"; 
     return str; 
    } 
}//End of Person 


public class Main { 
    public static void main(String [] args) { 
     Person person = new Person("Bob", 15); 
     System.out.println(person.toString()); 
     System.out.println("Switching my name..."); 
     person.setName("Joe"); 
     System.out.println(person.toString()); 
    } 
}//End of main 

あなたは違いを見るのは、あなたが持っているとしましょうか?オブジェクトの新しいインスタンスを作成する場合は、コンストラクタを使用する必要があります。この方法では、オブジェクトのすべてのフィールドを一度に設定でき、490832490セッター(この場合は名前と年齢のいずれか)を呼び出す必要はありません。次に、フィールドの値を変更する前に、設定されたオブジェクトの前に、セッター・アプローチを使用することができます。

私はあなたのタイプが不変であるために仮定されていない限り、あなたがそれ

+0

私の悪い習慣...フィールドに「public」ではなく「private」を使用していたはずです –

0

setメソッドはオブジェクトを変更可能にします。 setメソッドがなく、変数がprivateの場合、Objectは不変です。構築後に値を変更することはできません。値を変更する必要がある場合は、newObjectを作成する必要があります。

0

"セッター"では、インスタンス化後にオブジェクトのプライベート属性を変更できます。たとえば、次のようになります。

Lecture l1 = new Lecture(140, "Comp", 5); 
//Since "room" is private you can't write l1.room = 4 
//and have to use the setter method instead: 
l1.setroomNumber(4); 
l1.display(); 

属性が変更された場合は、何かしたい場合にも便利です。

のは、あなたが、あなたは自分の属性が変化した場合に呼び出さなっていないこれらのメソッドを心配する必要はありまたはsetChanged ()あなたのセッターメソッドで、決して() notifyObserversを呼び出すことができオブザーバーを使用していると仮定しましょう。

関連する問題