前言:
- 1)java
面向物件語言,面向程序圍繞程序(解決問題步驟),面向物件圍繞物體(名詞,特性(屬性),行為(動作、方法)),它們設計思想區別在于關心核心不同的,
主流都是面向物件的,
實際開發,先按面向物件思想進行設計,具體實作時面向程序(人習慣)
- 2)java 怎么支持面向物件呢?
a. 萬物皆物件,所有的類都是 Object 子類
b. java 中支持單繼承,多重繼承,Tiger 是 Animal 子類,Animal 是 Object 的子類,滿足單繼承(每次都一個父類,超類)
c. 面向物件的 4 大特性:封裝、繼承、多型、抽象
- 3)封裝的優點
a. 隱藏細節,開發者關注內容就少,好寫代碼,
b. 安全,你不需要知道我內部實作細節,private 修飾后,外部不能訪問,
c. 方便修改,私有,外部不能訪問,修改不影響其他類(送耦合)
- 4)繼承
a. extends 繼承
a.1 繼承實作類 class
a.2 繼承抽象類 abstract class (必須有抽象方法,子類去實作)
b. implements 實作
實作介面 interface (里面全是抽象方法,子類去實作)
面向物件
-
1)面向程序(早期)、面向物件(主流)、面向服務(SOA、微服務)(主流,在面向物件基礎上)
-
2)面向程序和面向物件的區別?
編程思想,做一件同樣事情,做的思路不同,
思路不同在哪里?
例子:把大象放到冰箱里,(本意:把公大象放到格力冰箱中)需求變更
面向程序:開發步驟(流水賬)
a. 把冰箱門打開
-
b. 把什么放進去:大象
-
c. 把大象放入冰箱
-
d. 把冰箱門關上
找出主體:名詞(冰箱、大象),圍繞它做事
找出動作:動詞(打開、放入、關上),強調程序
面向程序:找出把名詞主體,和動作(動詞)連接起來,最后怎么完成整個程序!
面向物件:
-
a. 找出主體(名詞:冰箱、大象)
-
b. 創建模型:(額外考慮,感徑訓蛇添足)
冰箱:容大、顏色、品牌、耗電、打開、關上
大象:產地、公母、皮、腿
- c. 執行步驟
打開冰箱,把大象放入冰箱,關上門
它考慮額外事情,目前為止用戶不關心,
在實際開發中,用戶不遵守他的話,他說的話不算數,
實際開發中,無法完全(合同),無法嚴格按合同執行,開發者就必須適應用戶的需求變更,
從這一實際角度出發,面向程序思考好還是面向物件思考好!
如果按照面向程序思考,它不能適應用戶需求變更,要修改代碼,加班加點完成,前面考慮不夠完善,
如果按照面向物件思考,它提前考慮很多細節,超過用戶要求,表面上多考慮了,但是當用戶需求變化,剛好就在我們多考慮范疇中!代碼不需改,改動量很少,按期完成,無需額外資金投入,
面向物件要考慮很多,考慮范圍,不能太廣,過度設計,設計都需要人力物力,
有一個平衡點,設計多大范圍合適呢? 系統分析師(高薪!)8 年
到超市購買商品
第一次用戶提出需求:要購買白酒和花生米
第二次用戶提出需求:要購買白酒和花生米,買豬頭肉(需求變更)
第三次用戶提出需求:+ 涼菜
用戶變化 n 次
面向程序:
1)到哪個超市
2)挑選商品(白酒、花生米)2 種,
3)購買,結束
每次需求都要改,有可能之前代碼框架都無法適應新需求,翻天覆地重做,
面向物件:
1)都有哪些超市,都有哪些商品,對超市商品全部建模 2000 種商品
2)到某個超市,挑選商品(白酒、花生米、豬頭肉、涼菜)
3)購買,結束
總的來說:面向物件優于面向程序設計,主流設計思想面向物件設計!
java 是怎么支持面向物件設計的?
java 面向物件,c 面向程序,c++面向物件,python 面向物件,javascript 面向物件,vue 框架面向物件
java 四大特性:圍繞面向物件而言:封裝、繼承、多型、抽象
封裝
面向程序程序中每個細節都需要開發者去了解,封裝改變這樣方式,它先進行建模,把名稱創建物件,設定它的屬性(代表這個事物的特點)和方法(表現一些動作)
把生活中的物品抽象成 java 中的物件
物件為了簡單,有些內容對外暴露,有些內容隱藏,隱藏就體現了封裝,
例子:手機
如果知道手機所有細節,我們現在都用不上手機,
- 1)對外暴露:螢屏、鍵盤、話筒、耳機、充電器
- 2)隱藏:怎么通訊,運行 app
對有些內容使用者是不關心它的內部實作,手機把這些內容進行封裝,用戶使用就簡單了,
代碼如何實作封裝呢?
有些功能用戶不能去訪問,用戶不需要知道內容封裝,
它需要知道,我們會單獨給它介面 api
手機:
1)創建一個類:Phone
2)類中封裝,對外看不到,創建屬性 call、keys,私有 private (體現了封裝)
3)對外暴露:怎么開發 call,怎么開發 keys?公有 public
package cn.tedu.oop;
//模擬手機建模(建立模型)需求中的名詞
public class Phone {
//成員變數,可以在多個方法中直接呼叫
private String call; //模擬打電話特性
private String keys; //模擬手機鍵盤特性
//如何對外暴露私有的屬性,對其進行操作,
//使用getXxx(獲取)和setXxx(設定)方法來操作私有屬性
//這個業界的規范,開發工具都直接支持自動產生對應屬性的get和set方法
//私有屬性外部不能訪問,但在類的內部的方法可以直接訪問
public String getCall() {
return call;
}
//外部怎么去設定成員變數值呢?setCall方法的引數
public void setCall(String call) {
//前面成員變數,后面是引數,引數就保存了用戶設定值,
//以后用戶使用get方法就可以獲取新的值
//引數名和成員變數的名稱重復,怎么區分誰是誰呢?
//this.value就可以區分,this代表本類,物件,this.value代表成員變數,就不是引數名
this.call = call;
}
public String getKeys() {
return keys;
}//加入Java開發交流君樣:756584822一起吹水聊天
public void setKeys(String keys) {
//警察,監聽電話,
//用戶只管呼叫setKeys方法,它并不知道這塊代碼
if( keys.equals("110") ) { //判斷keys值是否為110
System.out.println("通知警察");
}
this.keys = keys;
}
}

封裝的好處
1)把不讓外界知道的資訊就隱藏起來,外部無法操作,代碼比較安全,外部無法操作,
2)代碼只能內部處理,當代碼修改,所有呼叫地方都要隨之改變,這種結構緊耦合,如果代碼只能內部修改,修改后,外部絲毫不影響,這種結構松耦合,程式能實作松耦合就松耦合,封裝就實作松耦合結構,內部修改不影響其他代碼,
3)封裝后,里面程式實作細節,對應呼叫者來說不關心,只關心如何使用,把復雜問題變簡單,
繼承
什么叫繼承?
java 中繼承和生活繼承是一樣一樣的,父類(父親)和子類(自己),父親父親,子類子類,
java 繼承單繼承,c 語言允許多繼承(c 語言代碼質量出錯,很難找的其中一個原因),
結論:java 中單繼承,但是可以多層
java 中如何實作繼承關系?
實作繼承關系提供 2 個方式:
1)extends 關鍵字(繼承):語法 extends 后面跟類(class 實作類、abstract class 抽象類)
Tiger extends Animal
Eagle extends Animal
特點:Animal 是一個實作類,它具體實作 eat 方法
抽象類特點:它有部分實作(父類自己實作)和部分規定不實作的(子類去實作)
Tiger extends AbstractAnimal(抽象類中有抽象方法,抽象方法父類不實作,壓到子類去實作)
2)implements 關鍵字(實作):語法 implements 后面跟介面(interface)
介面特點:所有方法都是抽象方法,一點活都不干,它指手畫腳(它要規定子類實作方法)
為什么要使用繼承?
我們可以從父類繼承它的屬性和方法,在子類中直接呼叫父類資源(屬性和方法),方法和屬性都是 public,

通過對上面兩個類的觀察:
1)它們有共性,eat 方法一樣
2)它們有個性,Tiger 類它有自己的 run()方法,Eagle 類它有自己的 fly()方法,
有共性有不同!
缺點:
共性的方法,出現在多個類中,如果業務需要修改,要修改多處,作業量大,容易造成失誤,這個類改,那個類
忘改,造成結果不一致!
繼承
解決辦法?就是繼承!
1)要把共性方法抽取出來,放到一個單獨類中 Animal
2)把共性方法就從當前類中洗掉
3)兩個類連接起來,使用繼承,Tiger extends Animal,可以在子類中直接訪問父類方法 eat()



抽象類



介面



實作類和抽象類和介面區別

為什么需要抽象類?
學框架,框架中很多抽象類,例如:spring 框架
框架要做很多底層公用事情,讓我們寫代碼利用框架,程式更加健壯,更加安全,
業務需求私有事情,還得我們去實作
公用框架實作,私有我們自己實作,我們自己寫代碼怎么和框架對接,框架進行規定!
規范私有類(抽象方法宣告)
為什么需要介面?
提倡面向介面開發,你可以實作介面,別人可不可以介面,
java JDBC 資料庫一套規范,java 自身規定介面,其他廠商去實作
mysql 資料庫廠商,Mysql 的實作;oracle 資料庫廠商,oracle 的實作,
小結
今日給大家分享的是面向物件,這對于很多小白來說很友好的,大家都能看得懂!
生命不止堅毅魚奮斗,有夢想才是有意義的追求
給大家推薦一個免費的學習交流群:
最后,祝大家早日學有所成,拿到滿意offer,快速升職加薪,走上人生巔峰,
Java開發交流君樣:756584822
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/282106.html
標籤:java
