面向物件———封裝,包,訪問修飾符,static關鍵字
阿新 • • 發佈:2018-12-12
一、封裝概念
封裝實質就是將類的狀態資訊隱藏在類內部,不允許外部程式直接訪問,而是通過該類的方法來實現對隱藏資訊的操作和訪問。
理解:封裝就是將類內部的屬性私有化,不允許外部直接訪問,然後通過對應的get,set方法來實現對隱藏資訊的操作!
封裝好處:隱藏類的實現細節,限制不合理操作!
2.實現封裝的步驟:
- 修改屬性的可見性
- 設定get set方法
- 設定屬性的存取限制
程式碼如下:
//人類 public class Person { public String name; //姓名 public int age; //年齡 public String gender; //性別 //封裝屬性 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { if(age<0||age>150) { System.out.println("****輸入的年齡為:"+age+",該年齡不合法,將重置...."); return; } this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { if(gender.equals("男")||gender.equals("女")) { //判斷是否輸入的男或者女 this.gender=gender; }else { System.out.println("*****性別不合法*****"); } } //構造方法 public Person() { this.name="無名氏"; this.age=18; this.gender="男"; } //有參構造 public Person(String name,int age, String gender) { this.name=name; this.age=age; this.gender=gender; } //自我介紹方法 public void say() { System.out.println("自我介紹一下:"); System.out.println("姓名:"+this.name); System.out.println("性別:"+this.gender); System.out.println("年齡:"+this.age); } } //測試類 public class Test { public static void main(String[] args) { Person person=new Person(); //例項化物件 person.setAge(220); //給年齡賦值 person.setGender("中性"); //給性別賦值 person.setName("劉明"); //給姓名賦值 person.say(); //呼叫方法,輸出 } }
輸出結果:
二、包
1.使用包的步驟
- 新建包
- 將定義好的包分別放入不同的類中
- 匯入包
2.包的作用:
-
便於管理
-
防止命名衝突(主要是類名)
-
限制訪問許可權
3.包的定義
- package是宣告包的關鍵字
- 包的宣告必須是java原始檔中的第一條非註釋性語句,而且一個原始檔只能有一個宣告包的語句
-
包的使用規範:包名字首小寫,不能以圓點開頭或者結尾,不能包含除 " . " 外的其他特殊符號!
三、類和類的訪問修飾符
1.類的訪問修飾符
java中類的訪問修飾符
修飾符
同一個包中
非同一包中
public
可以使用
可以使用
預設修飾符
可以使用
不可以使用
2.類成員的訪問修飾符
修飾符 |
同一類中 |
同一包中 |
子類中 |
其他地方 |
private |
可以使用 |
不可以使用 |
不可以使用 |
不可以使用 |
預設修飾符 |
可以使用 |
可以使用 |
不可以使用 |
不可以使用 |
protected |
可以使用 |
可以使用 |
可以使用 |
不可以使用 |
public |
可以使用 |
可以使用 |
可以使用 |
可以使用 |
四、static關鍵字
1.用static關鍵字修飾屬性
用static修飾的屬性稱為靜態變數或者類變數,沒有使用static修飾的屬性叫做例項變數
2.用static關鍵字修飾方法
用static修飾的方法叫做靜態方法,沒有使用static修飾的方法叫做例項方法。
注意:
-
靜態方法/屬性,不屬於具體的物件,被呼叫時可以直接 類名.屬性/方法名 呼叫。
-
在靜態方法/變數中不能直接訪問非靜態(例項)方法/變數
-
在例項方法/變數中可以直接呼叫類中定義的靜態方法/變數