一、什么是封裝
菜鳥教程對封裝的解釋是“在面向物件程式設計方法中,封裝(英語:Encapsulation)是指一種將抽象性函式介面的實作細節部分包裝、隱藏起來的方法,”,簡單來說就是對公用的java代碼裝到一個盒子中,當需要使用這部分代碼的是時候,通過呼叫這個打包好的盒子就可以對這個功能進行實作,
二、為什么要進行封裝
- 減少耦合,程式設計要追求“低耦合,高內聚”, 高內聚就是類的內部資料操作細節自己完成,不允許外部干涉;低耦合是僅暴露少量的方法給外部使用,盡量方便外部呼叫,封裝就滿足了低耦合的需求,
- 隱藏資訊,提高可靠性,封裝可以被認為是一個保護屏障,防止該類的代碼和資料被外部類定義的代碼隨機訪問,
- 提高代碼的復用性,相同的功能代碼不需要第二次書寫,直接呼叫就可以,極大的提高了代碼的復用性,降低了代碼量,
- 方便修改和實作,當需要對其某部分進行修改時,做到一改全改,
三、封裝的實作(屬性私有,get/set)
Student.java,是一個學生類,有私有屬性,這些屬性只有在本類里面才有效,在Student類里面針對各個屬性有get和set方法,這些方法是共有屬性,當產生一個Student物件時,就可以通過這些共有屬性來訪問這些私有變數,這就是這個類提供對外的介面,
public class Person {
private String name;
private int age;
private int id;
private char sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
}
Application.java通過創建一個物件來使用Student類中的私有屬性:
public class Application {
public static void main(String[] args) {
Person person=new Person();
System.out.println(person.getName());
person.setName("ThreePure");
System.out.println(person.getName());
person.setAge(21);
System.out.println(person.getAge());
person.setId(512);
System.out.println(person.getId());
person.setSex('男');
System.out.println(person.getSex());
}
}
輸出結果為:
null ThreePure 21 512 男
由運算結果可知,當變數被定義而沒有被初始化時,是會有一個默認值的,
封裝還一個好處就是可以提高代碼的安全性,這里年齡可以隨意輸入,但是現實生活中,年齡的范圍是0-120歲,這就需要使用封裝對年齡進行限制,當輸入非法的資料時能夠自行判斷,對setAge方法進行修改,
public void setAge(int age) {
if (age>120 || age<0){
System.out.println("輸入的年齡非法");
}else {
this.age = age;
}
}
person.setAge(121);
System.out.println(person.getAge());
運算結果:
輸入的年齡非法 0 //使用默認值輸出,
以上實體中public方法是外部類訪問該類成員變數的入口,因此,任何要訪問類中私有成員變數的類都要通過這些getter和setter方法,
四、IDEA快速創建get/set方法,
在需要創建get/set方法處按Alt+insert組合鍵打開Generate選單,選擇Getter and Setter,

在彈出來的選單中選中要創建get/set方法的變數:

到此,get/set方法的創建就完成了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/114488.html
標籤:其他
上一篇:C++ Builder 6.0 關于ListBox的一個屬性,請教
下一篇:617合并二叉樹
