Java封裝(Encapsulation)-詳解
【1】生活案例:
ATM , 電線
【2】Java中封裝的理解:
將某些東西進行隱藏,然後提供相應的方式進行獲取。
我們程式設計追求“高內聚,低耦合”。
➢高內聚:類的內部資料操作細節自己完成,不允許外部干涉;
➢低耦合:僅對外暴露少量的方法用於使用。
隱藏物件內部的複雜性,只對外公開簡單的介面。便於外界呼叫,從而提
高系統的可擴充套件性、可維護性。通俗的說,把該隱藏的隱藏起來,該暴露
的暴露出來。這就是封裝性的設計思想。
【3】封裝的好處:
提高程式碼的安全性
【4】程式碼:通過一個屬性感受封裝:
public class Girl {//女孩
//屬性:
private int age;
//讀取年齡:
public int duquAge(){
return age;
}
//設定年齡:
public void shezhiAge(int age){
if(age >= 30 ){
this.age = 18;
}else{
this.age = age;
}
}
}
public class Test {
//這是一個main方法,是程式的入口:
public static void main(String[] args) {
//建立一個Girl類的物件:
Girl g = new Girl();
/*g.age = 33;
System.out.println(g.age);*/
//設定年齡:
g.shezhiAge(31);
//讀取年齡:
System.out.println(g.duquAge());
}
}
上面的程式碼,對於屬性age來說,我加了修飾符private,這樣外界對它的訪問就受到了限制,現在我還想加上其他的限制條件,但是在屬性本身上沒有辦法再加了,所以我們通過定義方法來進行限制條件的新增。
以屬性為案例:
進行封裝:
(1)將屬性私有化,被private修飾–》加入許可權修飾符
一旦加入了許可權修飾符,其他人就不可以隨意的獲取這個屬性
(2)提供public修飾的方法讓別人來訪問/使用
(3)即使外界可以通過方法來訪問屬性了,但是也不能隨意訪問,因為我們們在方法中可以加入 限制條件。
【5】實際開發中,方法一般會寫成 setter,getter方法:
可以利用IDEA快捷鍵生成:alt+insert -->getter and setter:
public class Girl {//女孩
//屬性:
private int age;
//讀取年齡:
public int getAge(){
return age;
}
//設定年齡:
public void setAge(int age){
if(age >= 30 ){
this.age = 18;
}else{
this.age = age;
}
}
}
【6】加深練習:
public class Student {
//屬性:
private int age;
private String name;
private String sex;
//加入對應的setter和getter方法:
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
if("男".equals(sex) || "女".equals(sex) ){//sex是男 或者 是 女
this.sex = sex;
}else{
this.sex = "男";
}
}
//加入構造器:
public Student(){
}
public Student(int age,String name,String sex){
this.age = age;
this.name = name;
//this.sex = sex;
this.setSex(sex);
}
}
public class Test {
//這是一個main方法,是程式的入口:
public static void main(String[] args) {
//建立一個Student物件:
Student s1 = new Student();
s1.setName("nana");
s1.setAge(19);
s1.setSex("女");
System.out.println(s1.getName()+"---"+s1.getAge()+"----"+s1.getSex());
Student s2 = new Student(18,"菲菲","asdfasdfsadf");
System.out.println(s2.getName()+"---"+s2.getAge()+"----"+s2.getSex());
}
}
相關文章
- 物件導向08:封裝詳解物件封裝
- java 封裝Java封裝
- Java(三)封裝Java封裝
- Java學習-封裝Java封裝
- java三大特性-封裝Java封裝
- Chapter10 Java封裝APTJava封裝
- Java 封裝 SDK 以及使用Java封裝
- 詳解vue中Axios的封裝與API介面的管理VueiOS封裝API
- 基於Windows API的命名管道的封裝與使用詳解WindowsAPI封裝
- Java 位元組的常用封裝Java封裝
- java基礎private/封裝篇Java封裝
- 物件導向之封裝(Java)物件封裝Java
- 詳解JDBC資料庫連結及相關方法的封裝JDBC資料庫封裝
- java自己封裝檔案處理Java封裝
- Java基礎04 封裝與介面Java封裝
- # 095 01 Android 零基礎入門 02 Java物件導向 02 Java封裝 01 封裝的實現 03 # 088 01 Android 零基礎入門 02 Java物件導向 02 Java封裝 03 封裝總結 01 封裝知識點總結AndroidJava物件封裝
- Java註解詳解Java
- Java 註解詳解Java
- Java基礎知識篇02——封裝Java封裝
- 【封裝那些事】 缺失封裝封裝
- Java String 詳解Java
- Java 反射詳解Java反射
- 詳解 Java NIOJava
- java方法詳解Java
- java反射詳解Java反射
- Java鎖詳解Java
- Java Stream 詳解Java
- 【Java】JDBC詳解JavaJDBC
- Java ThreadPoolExecutor詳解Javathread
- Java SPI詳解Java
- Java註解(Annotation)詳解Java
- 好程式設計師分享JavaScript事件委託代理和函式封裝詳解程式設計師JavaScript事件函式封裝
- asp.net core3.1 實戰開發(授權,鑑權封裝詳解)ASP.NET封裝
- python介面自動化(三十七)-封裝與呼叫--讀取excel 資料(詳解)Python封裝Excel
- python介面自動化(三十五)-封裝與呼叫--流程類介面關聯(詳解)Python封裝
- 封裝封裝
- Java註解最全詳解(超級詳細)Java
- 【JavaScript框架封裝】公共框架的封裝JavaScript框架封裝