封裝指的是將不想或者不需要公開給別人知道的部分隱藏起來,例如不需要會組裝電腦,但是還是可以使用電腦,不需要理解冷氣機的構造,還是可以吹冷氣;因為電腦公司已經將電腦組裝好提供給需要使用的人使用,冷氣機公司已經將冷氣內的各種功能包裝好,只需要按下開啟就能使用。
private
:僅可讓自身的類使用。default(未設置任何修飾)
:可以提供給同一個package
的類使用,其他不可以。protected
:可以提供給子package
的類使用。public
:任何類都可以使用。private
→ default
→ protected
→ public
使用方式:
public class PersonTest {
public static void main(String[] args) {
Person person = new Person();
person.name = "Jasper";
//person.age = 25; // 這樣會錯誤,因為在Person class中已經將age 設定為private,所以是無法使用的
person.setAge(25);
System.out.println(name + "is " + person.getAge() + " years old."); // Jasper is 25 years old.
}
}
class Person {
String name;
private int age;
protected void drink() {
System.out.println("Drinking water is necessary for person");
}
public void setAge(int num) {
if(num >= 0) {
age = num;
}
}
public int getAge() {
return age;
}
}
以Person
這個class
來舉例可以看到(第二個class
的位置)
String name;
的屬性,他屬於default(未設置權限)
,所以可以提供給同一個package
中的PersonTest
使用。private int age;
的屬性,只可以在Person
這個class
中使用,如果在PersonTest
去使用時,會出現錯誤。Person
中定義了一個setAge
的方法去對age
進行賦值。Person
中定義了一個getAge
的方法去獲取age
的值。PersonTest
中,實例化
一個Person
類,並且去進行賦值、調用方法的操作。假設現在有這兩個不同的package
,分別是management_department
和engineering_department
src/
└── com/
└── jaspercompany/
├── management_department/
│ └── Employee.java
└── engineering_department/
└── EmployeeTest.java
在management_department
裡的Employee.java
程式碼如下:
class Employee {
private String name;
String phoneNumber;
public String jobTitle;
}
在engineering_department
裡的EmployeeTest.java
程式碼如下:
import com.jaspercompany.management_department.Employee;
public class EmployeeTest {
public static void main(String[] args) {
Employee employee = new Employee();
employee.name = "Jasper";
employee.phoneNumber = "0912345678";
employee.jobTitle = "Boss";
}
}
請問上面實例化
的employee
,會出現甚麼問題?
employee
的name
是private
屬性,無法在外部使用,只能在class Employee
裡面使用employee
的phoneNumber
是default(沒有填寫任何權限修飾)
屬性,無法在外部使用,只能在class Employee
或是在management_department
中的其他.java
文件使用jobTitle
可以正常使用,因為是public
屬性所以上面會有兩個錯誤,程式碼無法正常運行。
已經將過去(含今天)文章內容中所有實體化
的部分改為實例化
較為準確一點,用字較為準確,如果有造成誤會請見諒。