OKみんな、今まで(そして私は初心者なので)手続き型プログラミングに基づいてJavaをプログラミングしていましたが、それは素晴らしかったですが、Javaをボスのように使う時が来ました。
練習としてコードを書きながら、OOPの概念を学んでいます。私が理解していないのは、この方法でいくつかのオブジェクトを作成した場合です。
Contact first = new Contact(25, "Yosi", "Male");
System.out.println("Age of contact " + first.toString() + " is - "
+ first.getAge() + " " + first.getName());
Contact second = new Contact(22, "lisa", "Femal");
System.out.println("Age of contact " + second.toString() + " is - "
+ second.getAge() + " " + second.getName());
Contact third = new Contact(34, "Adam", "Male");
System.out.println("Age of contact " + third.toString() + " is - "
+ third.getAge() + " " + third.getName());
結果は次のようになります。
Age of contact Contact@173f7175 is - 25 Yosi
Age of contact Contact@4631c43f is - 22 lisa
Age of contact Contact@6d4b2819 is - 34 Adam
しかし、最初の連絡先をもう一度印刷しようとすると、最後に作成されたオブジェクトの値が取得されます。つまり、このコードの場合:
Contact first = new Contact(25, "Yosi", "Male");
System.out.println("Age of contact " + first.toString() + " is - "
+ first.getAge() + " " + first.getName());
Contact second = new Contact(22, "lisa", "Femal");
System.out.println("Age of contact " + second.toString() + " is - "
+ second.getAge() + " " + second.getName());
Contact third = new Contact(34, "Adam", "Male");
System.out.println("Age of contact " + third.toString() + " is - "
+ third.getAge() + " " + third.getName());
System.out.println("Age of contact " + first.toString() + " is - "
+ first.getAge() + " " + first.getName());
結果は次のようになります。
Age of contact Contact@173f7175 is - 25 Yosi
Age of contact Contact@4631c43f is - 22 lisa
Age of contact Contact@6d4b2819 is - 34 Adam
Age of contact Contact@173f7175 is - 34 Adam
さまざまなオブジェクトを確認できるように、オブジェクト文字列表現を追加しました。新しいオブジェクトを作成していると思いましたが、各オブジェクトには独自のインスタンス値がありますか?説明してもらえますか?
これは連絡先クラスです:
public class Contact {
private static int age = 0;
private static String name = "Unknown";
private static String gender = "Male";
public Contact(int a, String n, String g) {
age = a;
name = n;
gender = g;
}
public Contact() {
}
public static int getAge() {
return age;
}
public static String getName() {
return name;
}
public static String getGender() {
return gender;
}
public static void setAge(int a) {
age = a;
}
public static void setName(String n) {
name = n;
}
public static void setGender(String g) {
gender = g;
}
}
静的修飾子を削除すると、「非静的フィールドへの静的参照を作成できません」というエラーが表示されることに注意してください。