2015-11-08 92 views
2
class AStudent { 
    private String name; 
    public int age; 
    public void setName(String inName) { 
     name = inName; 
    } 

    public String getName() { 
     return name; 
    } 
} 
public class TestStudent2 { 
    public static void main(String s[]) { 
     AStudent stud1 = new AStudent(); 
     AStudent stud2 = new AStudent(); 
     stud1.setName("Chan Tai Man"); 
     stud1.age = 19; 
     stud2.setName("Ng Hing"); 
     stud2.age = -23; 
     System.out.println("Student: name="+stud1.getName()+ 
          ", age=" + stud1.age); 
     System.out.println("Student: name="+stud2.getName()+ 
          ", age=" + stud2.age); 
    } 
} 

我如何可以通過添加數據封裝到age屬性提升類AStudent。如果輸入的age無效,我想打印一條錯誤消息並將年齡設置爲18.Java對象集屬性默認

+2

'Java的! = javascript' –

回答

0

您正在使用name屬性的封裝。年齡可以做同樣的事情。使得訪問被限制到吸氣劑和setter

class AStudent { 
    // ... 
    private int age; 
    public void setAge(int age) { 
     this.age = age; 
     if (age < 1) { 
      this.age = age; 
     } 
    } 
} 

上面的代碼改變age屬性私人。所以你還必須添加一個getter方法,並更改TestStudent2以使用新的getter和setter。

什麼使年齡無效?上面的代碼假設任何小於1的值都是無效的。

+0

非常感謝。現在我可以做到這一點。 –

2

首先,修改age,使其不公開。然後添加accessor和mutator方法(在mutator中檢查無效值 - 並將其設置爲18)。喜歡的東西,

private int age; 
public int getAge() { 
    return age; 
} 
public void setAge(int age) { 
    if (age < 0) { 
     System.err.println("Invalid age. Defaulting to 18"); 
     age = 18; 
    } 
    this.age = age; 
} 

然後你可以用一些使用它像setName

stud1.setAge(19); 

stud2.setAge(-23); 

而且你可以更容易地顯示在AStudent覆蓋toString

@Override 
public String toString() { 
    return String.format("Student: name=%s, age=%d", name, age); 
} 

然後你就可以打印侑AStudent情況下像

System.out.println(stud1); // <-- implicitly calls stud1.toString() 
System.out.println(stud2); 
+1

非常感謝。現在我可以做到這一點。 –