1. 封裝
2. 繼承
3 多態
一、封裝
我們日常使用的電腦主機,把cpu、內存、主板等等都封裝到機箱裏面去。假如沒有機箱的話的出現什麼問題,主機、主板全部都散落在一處,然後開機沒有開機按鈕,那麼需要我們直接操作接跳線才能把電腦開啓。這樣子的話假如操作不慎的話,會讓機器損壞危險,那麼假如用機箱封裝起來的話,那麼就不需要這樣子做了。體現了封裝的---安全特性。
你拿電腦去加內存,可以直接給電腦給維修的人,等他加好內存了之後。你拿到的還是那個機箱,裏面發生了怎樣子的變化你並不知道。封裝的第二個好處-將變化隔離。
在機箱裏面提供一個開機按鈕,而不需要你直接使用跳線開機的話,體現了封裝的—便於使用的特性。
只要機箱提供了一個開機的功能,然後無論這個機箱拿到哪裏去,都可以使用這個開機的功能.體現了封裝的---提供重複性的特性。二、需求:
使用java類描述網站的會員。
問題: 性別有問題??如果別人註冊性別填寫人妖原因: 由於其他人可以直接操作sex屬性。可以對sex屬性進行了直接的賦值。
總結:如果不使用封裝,很容易賦值錯誤,並且任何人都可以更改,造成信息的不安全。
問題解決:使用封裝權限修飾符:
權限修飾符就是控制變量可見範圍的。
public : 公共的。 public修飾的成員變量或者方法任何人都可以直接訪問。private : 私有的, private修飾的成員變量或者方法只能在本類中進行直接訪問。
三、封裝的實現
設置類的屬性爲private(關鍵字),不能使用對象名.屬性名的方式直接訪問對象的屬性。
封裝的步驟:
1. 使用private修飾需要被封裝的屬性。2. 提供一個公共的方法設置或者獲取該私有的成員屬性。
命名規範:
set屬性名();
get屬性名();
疑問: 封裝一定要提供get或者set方法嗎?
不一定, 根據需求而定的。
規範 : 在現實開發中一般實體類的所有成員屬性(成員變量)都要封裝起來。
實體類:實體類就是用於描述一類 事物的就稱作爲實體類。例如:汽車
工具類(Arrays數組的工具類):
封裝的好處:
1. 提高數據的安全性。2. 操作簡單。(相對於團隊其他開發者調用)
3. 隱藏了實現。
代碼實現
class Member{
public String name; //名字
private String sex; //性別
public int salary; //薪水
//定義一個公共的方法設置sex屬性
public void setSex(String s){
if (s.equals("男")||s.equals("女")){ //注意: 如果比較兩個字符串的內容是否一致,不要使用==比較, 使用equals方法。
sex = s;
}else{
//默認是男
sex = "男";
}
}
//定義一個公共的方法獲取sex屬性
public String getSex(){
return sex;
}
//聊天
public void talk(){
System.out.println(name+"聊得非常開心");
}
}
class myClass{
public static void main(String[] args)
{
Member m = new Member();
m.name=“鳳姐”;
m.setSex("女");
m.salary = 800;
System.out.println("姓名:"+ m.name+" 性別:"+ m.getSex()+" 薪水:"+ m.salary);
}
}
需求2: 使用java類描述一個計算器類,計算器具備操作數1, 操作數2 、操作符三個公共 的屬性,還具備計算的功能行爲。
要求: 不能直接對操作數1,操作數2,運算符這些屬性進行直接 的賦值,要封裝起來。 (+ - * / )
根據需求提供get或者set方法。
需要提供set方法
//計算器類
class Calculator{
private int num1; //操作數1
private int num2; //操作數2
private char option ; //運算符
//提供公共的方法設置屬性值....
public void initCalculator(int n1 , int n2 , char o){
num1 = n1;
num2 = n2;
if(o=='+'||o=='-'||o=='*'||o=='/'){
option = o;
}else{
option = '+';
}
}
//因爲用戶輸入的操作數 不需要再返回給用戶,所以不需要寫get方法
//計算的功能
public void calculate(){
switch(option){
case '+':
System.out.println("做加法運算,結果是:"+(num1+num2));
break;
case '-':
System.out.println("做減法運算,結果是:"+(num1-num2));
break;
case '*':
System.out.println("做乘法運算,結果是:"+(num1*num2));
break;
case '/':
System.out.println("做除法運算,結果是:"+(num1/num2));
break;
}
}
}
class MyClass
{
public static void main(String[] args)
{
//創建了一個計算器對象
Calculator c = new Calculator();
//設置屬性值
c.initCalculator(1,2,'a');
//調用計算器的計算功能
c.calculate();
}
}