昨天介紹到為什麼要封裝、封裝的好處及package / import今天就再繼續介紹其他封裝技術!
當前類別的存取權限,只可以在同一個類別存取,不可以在子類別存取。
一般而言,設計類別時,建議實體變數(instance variable)設定為 private權限,再透過方法來存取資料 (如getter/setter方法)
套件的存取權限,預設範圍是同一個類別和套件中存取,但不包含不同套件的子類別
子類別的存取權限,可以在同一個類別、其子類別或同一套件中存取,包含不同套件
使用protected來修飾方法,通常希望其子類別來覆寫這個方法
公共的存取權限,適用全域範圍,任何類別都可以存取,包含子類別。
public class Person {
//只能在Person類別內才可以操作存取,在Person 之外只能透過對應的getter setter方法操作存取
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
if(name.length() > 6 || name.length() < 2 ) {
System.out.println("您設置的人名不符合要求");
return;
}else {
this.name = name;
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age > 100 || age < 0) {
System.out.println("您設置的年齡不符合要求");
return;
}else {
this.age = age;
}
}
}
public class PersonDemo {
public static void main(String[] args) {
Person person = new Person();
//person.age = 1000; //變數已被隱藏,出現編譯錯誤
person.setAge(1000);//您設置的年齡不符合要求
person.setAge(30);
System.out.println("設置成功年齡為:" + person.getAge());
person.setName("小明");
System.out.println("設置成功名字為:" + person.getName());
}
}
最外層的類別定義、與檔名同名的那個類別,只能用public 和default不能用protected或private修飾。
因爲外部類別沒有處於任何類別的內部,protected或private對外部類別沒有意義
因為沒有意義,區域變數的存取已經由本身所屬的方法決定了
在一個.java檔中,我們可以定義多個class,方便我們完成所需要的功能。
以Human.java為例;
class Human{
// code..
}
class Animal{
// code...
}
這樣是可以的,編譯後會產生Human.class及Animal.class兩個類別檔。
但現在我們要討論修飾元的部份,我們很清楚外部的的類別只能用或public修飾。
以Human.java來說:
public class Human{
// code...
}
class Animal{
// code...
}
上面這樣的寫法可以,但如果寫成以下的程式碼
class Human{
// code...
}
public class Animal{ //編譯錯誤
// code...
}
就會出現編譯錯誤的訊息:The public type Animal must be defined in its own file
也就是說,要用public修飾的外部類別,只能是『與檔名相同』的那個類別。
今天就先到這邊明天繼續封裝part3唷!