java面向物件思想之封裝
阿新 • • 發佈:2020-09-23
一、什麼是封裝
菜鳥教程對封裝的解釋是“在面向物件程式設計方法中,封裝(英語: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方法的建立就完成了。