java中封裝的作用和含義
程式設計追求“高內聚,低耦合”。高內聚就是類的內部資料操作細節自己完成,不允許外部干涉。低耦合是僅暴露少量的方法給外部使用,儘量方便外部呼叫。
程式設計中封裝的具體優點:
1.提高程式碼的安全性
2.提高程式碼的複用性
3.“高內聚”:封裝細節,便於修改內部程式碼,提高可維護性
4.“低耦合”:簡化外部呼叫,便於呼叫者使用,便於擴充套件和寫作。
java中使用“訪問控制符”來控制哪些細節需要封裝。哪些細節需要暴露的。Java中4種“訪問控制符”。分別為:private、default、protected、public,他們說明了面相物件的封裝性。
測試案例程式碼:
package com.jackfujia.oo2;
/**
*
*測試封裝
* @author Administrator
*
*/
public class TestEncapsulation {
public static void main(String[] args) {
Human h = new Human();
//h.age = 13; 這裡因為下面的age被封裝起來了。對其不可見。所以無法呼叫
h.name = "福福福福福";
h.height = 200;
}
}
class Woman extends Human{
void sayAge2() {
// System.out.println(age); 子類也無法使用父類的私有屬性和方法。
}
}
package com.jackfujia.oo;
import com.jackfujia.oo2.Human;
public class TestEncapsulation2 {
Human h = new Human();
// h.name = "俯臥"; name為預設default屬性,不能被不同包的類訪問。
//h.height = 100; 不同包的不同類
}
class Girl extends Human{
void shenGao() {
System.out.println(height); //不同包的子類可以使用
}
}
package com.jackfujia.oo2;
public class Human{
private int age; //加了private,只能在這個類裡面用
String name; //預設default。預設在包裡的都能用
protected int height;
void sayAge() {
System.out.println(age);
}
}
封裝的使用細節:
類的屬性的處理:
1.一般使用private訪問許可權
2.提供相應的get、set方法來訪問相關屬性,這些方法通常是public修飾的。以提供對屬性的賦值與讀取操作。(注意!boolean變數的get方法是is開頭。)
3.一些只用於本類的輔助性方法,可以使用private修飾,希望其他類呼叫的方法用public修飾。
案例小程式碼:
package com.jackfujia.oo2;
/**
* 仍然測試封裝
* @author Administrator
*
*/
public class Person4 {
private int id;
private String name;
private int age;
private boolean man;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
if(age >= 1 && age <= 130) {
this.age = age;
}else {
System.out.println("請輸入正常的年齡");
}
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public boolean isMan() {
return man;
}
public void setMan(boolean man) {
this.man = man;
}
}
package com.jackfujia.oo2;
/**
*
*測試封裝
* @author Administrator
*
*/
public class TestEncapsulation {
public static void main(String[] args) {
Human h = new Human();
//h.age = 13; 這裡因為下面的age被封裝起來了。對其不可見。所以無法呼叫
h.name = "福福福福福";
h.height = 200;
Person4 p4 = new Person4();
p4.setAge(14);
p4.setName("我你大爺!");
System.out.println(p4.getName());
System.out.println(p4.getAge());
}
}
class Woman extends Human{
void sayAge2() {
// System.out.println(age); 子類也無法使用父類的私有屬性和方法。
}
}