ˉ
理解封裝
封裝(Encapsulation)是
面向對象三大特征之一
(封裝、繼承、多態),它指的是將對象的狀態信息隱藏在內部,
不允許
外部程序直接訪問對象內部信息,而是通過該類所提供的方法來實現對內部信息的操作和訪問。
對一個類或對象實現良好的封裝,可以實現以下目的:
μ
隱藏類的實現細節。
μ
讓使用者只能通過事先預定的方法訪問數據,從而可以在該方法里加入控制邏輯,限制對屬性不合理訪問。
μ
可進行數據檢查,從而有利于保證對象信息的完整性。
μ
便于修改,提高代碼的可維護性。
為了實現良好的封裝,需要從兩個方面考慮:
μ
將對象的屬性和實現細節隱藏起來,不允許外部直接訪問。
μ
把方法暴露出來,讓方法來操作或訪問這些屬性。
隱藏和封裝
使用訪問控制符
注意:對于類而言,可以使用public和默認訪問控制符修飾,使用public修飾的類可以被所有類使用,不使用任何訪問控制符修飾的類只能被同一個包中的所有類訪問。
定義Person類,實現良好的封裝。
public class Person{
private String name;
private int age;
public void setName(String name) {
//要求用戶名必須在2~6位之間
if (name.length() > 6 || name.length() < 2){
System.out.println("您設置的人名不符合要求");
}else{
this.name = name;
}
}
public String getName(){
return this.name;
}
public void setAge(int age){
//要求用戶年齡必須在0~100之間
if (age > 100 || age < 0){
System.out.println("您設置的年齡不合法");
}else{
this.age = age;
}
}
public int getAge(){
return this.age;
}
}
注意:屬性的getter方法和setter方法有重要的意義,命名應遵循的原則:將原屬性名的首字母大寫,并在前面分別增加set和get動詞,就變成setter和getter方法名 。
訪問控制符的使用總結:
μ
類中絕大部分屬性應該使用
private
修飾,除了一些static修飾的、類似全局變量的屬性,才考慮使用
public
修飾。
μ
有些方法只是用于輔助實現該類的其他方法,這些方法被稱為工具方法,也應用
private
修飾。
μ
如果某個類主要用作其他類的父類,該類里包含的大部分方法可能僅希望被其子類重寫,而不想被外界直接調用,則應該使用protected修飾這些方法。
μ
希望暴露出來給其他類自由調用的方法使用public修飾。
μ
頂級類通常都希望被其他類自由使用,所以大部分頂級類都使用public修飾。
ˉ
package和import
μ
包:
Java中,包(package)是一組相關的類和接口的集合。Java編譯器將包與文件系統的目錄一一對應起來。
μ
μ
優點:
ü
避免大量類的重名沖突,擴大名字空間。
ü
包體現了
封裝機制
。
μ
包的創建:
如果希望把一個類放在指定的包結構下,應該在Java源程序的
第一個非注釋行
放如下格式的代碼:package packageName[.packageName[…]];
μ
例4.18 包的創建。
package hbsi;
public class HelloWorld{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
注意:
ü
包名是有效地標識符即可,但從可讀性規范角度來看,包名應該全部由小寫字母組成。
ü
為了避免不同公司之間類名的重復,Sun建議使用單位Internet域名倒寫來作為包名,
ü
package語句必須作為源文件的第一句非注釋性語句,一個源文件只能指定一個包,該源文件中可以定義多個類,則這些類將全部位于該包下。
ü
如果沒有顯示指定package語句,則處于無名包下。實際企業開發中,通常不會把類定義在無名包下。
μ
包中類的使用
如果要使用包中的類,可以有兩種方法:
ü
引用包中的類(使用類的全限定名稱)myPackage
.
mySubPackage
.
Book
bookObj=new myPackage
.
mySubPackage
.
Book
();
ü
import語句引入包中的類
格式:import 包名 . 類名;
或 import 包名 . *; //“*”號表示所有類
例如: import myPackage . mySubPackage.*;
Book bookObj=new Book();
格式:import 包名 . 類名;
或 import 包名 . *; //“*”號表示所有類
例如: import myPackage . mySubPackage.*;
Book bookObj=new Book();
注意:在引入具有層次結構的包時,“*”號僅僅表示該包中的所有類,如果該包中還有子包,那么子包中的類時不被包括的。
μ
比較兩種方法的優缺點:
ü
適用包名作前綴的方法使程序清晰,很容易就看出所使用的類位于哪個包中;而引入包的方法要知道某個類所在的包比較困難.
ü
使用
引入包的方法會帶來名字沖突
的問題,而使用包名作前綴不會存在這樣的問題.
ü
使用包名作前綴書寫程序時比較麻煩.
μ
靜態導入
JDK1.5以后更是增加了一種靜態導入的語法,它用于導入指定類的某個靜態屬性值或全部靜態屬性值。
JDK1.5以后更是增加了一種靜態導入的語法,它用于導入指定類的某個靜態屬性值或全部靜態屬性值。
ü
導入指定類單個靜態屬性
import static 父包.子包…類名.靜態屬性名;
例:import static java.lang.System.out;
import static 父包.子包…類名.靜態屬性名;
例:import static java.lang.System.out;
ü
導入指定類全部靜態屬性
import static 父包.子包…類名.*;
例:import static java.lang.Math.*;
import static 父包.子包…類名.*;
例:import static java.lang.Math.*;
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
