java的封装性_Java10-java语法基础(九)——java的封装性
Java10-java語法基礎(九)——java的封裝性
一、Java的三大特性:封裝、多態、繼承
封裝:通過類封裝對象的數據成員和成員方法,保證只有可信的類或者對象能夠訪問這些方法和數據成員,對不可信的類或者對象進行信息隱藏。
繼承:繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據成員和方法,并能擴展新的能力。
多態:多態性是指不同的對象,收到同一消息可以產生不同的結果。
二、面向對象編程的封裝性
封裝的實現:通過private關鍵字實現
1、封裝數據成員和成員方法
(1)封裝數據成員:一般情況下,沒有特殊說明,類的數據成員都是私有的
private 數據類型 數據成員名稱;
(2)封裝成員方法:一般情況下,沒有特殊說明,類的成員方法不要私有,否則就沒有可以訪問類的途徑
private 方法返回值 方法名(參數列表){}
private 類名(參數){} —— 封裝構造方法
三、訪問控制修飾符
1、private:私有的,只能在類的內部訪問;
2、protected:保護的,在類的內部、子類中、同一個包中;
2.5、默認的:在類的外部、子類、同一包中;
3、public:公有的,在任何地方都可以訪問。
注意:任何一個java文件中,只能有一個公共主類:public class 類名(){},再寫其他類不能加public,可以寫class Test(){}
四、setter和getter方法
如何在類的外部訪問私有數據成員?
訪問:public String getName(){return name;}
修改:public void setName(String name){this.name = name;}
注:
(1)eclipse自動生成get和set方法:右鍵——source——Generate Getters and Setters…
(2)字段就是數據成員(成員變量)
四、getters和setters方法作用:為用戶提供了在類的外部訪問類的私有數據成員的方法
1、setters:設置私有數據成員的值
格式:public void set私有數據成員名(私有數據成員類型名 要修改成的私有數據成員名){私有數據成員名 =要修改成的私有數據成員名;}
public void setName(String name) {
this.name = name;
}
2、getters:獲取數據成員的值
格式:public String getName(){return私有數據成員名;}
public String getName() {
return name;
}
五、this關鍵字——代表當前對象
作用:
1、引用本類的數據成員和成員方法:
this.數據成員名
this.成員方法名([參數])
2、調用本類的構造方法
this.構造方法名([參數])
注意:在一個構造方法中,若用this調用另一個構造方法,則它必須是這個構造方法中的第一條語句;
問題:super()和this()為什么一定要在第一行?
super()在第一行的原因就是: 子類有可能訪問了父類對象, 比如在構造函數中使用父類對象的成員函數和變量, 在成員初始化使用了父類, 在代碼塊中使用了父類等, 所以為保證在子類可以訪問父類對象之前要完成對父類對象的初始化。
this()在第一行的原因就是: 為保證父類對象初始化的唯一性. 我們假設一種情況, 類B是類A的子類, 如果this()可以在構造函數的任意行使用, 那么會出現什么情況呢? 首先程序運行到構造函數B()的第一行, 發現沒有調用this()和super(), 就自動在第一行補齊了super() , 完成了對父類對象的初始化, 然后返回子類的構造函數繼續執行, 當運行到構造函數B()的"this(2) ;"時, 調用B類對象的B(int) 構造函數, 在B(int)中, 還會對父類對象再次初始化! 這就造成了對資源的浪費, 當然也有可能造成某些意想不到的結果, 不管怎樣, 總之是不合理的, 所以this() 不能出現在除第一行以外的其他行!
3、使用this的情況
(1)形式參數名與類數據成員名重名時;
(2)方法的局部變量名與類的變量同名時;
(3)在一個構造方法中,調用類的另一個構造方法時,也就是表示當前對象。
總結
以上是生活随笔為你收集整理的java的封装性_Java10-java语法基础(九)——java的封装性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ios开发笔记之 线程间通信
- 下一篇: java list 转 scala_Ja