面向對象的四大支柱:
抽象 - 定義一個類的過程就是一個抽象的過程(數據抽象刀崖、行為抽象)
通過抽象我們可以將數據和操作數據的方法以"對象"的概念綁定到一起
抽象的過程是一個仁者見仁智者見智的過程苦酱,對同一個對象做抽象可能會產生不同的結果封裝 - 隱藏一切可以隱藏的實現(xiàn)細節(jié),只向外界提供最簡單的編程接口
繼承 - 從一個已有的類創(chuàng)建新類的過程葬项,提供繼承信息的叫父類(超類、基類)
得到繼承信息的叫子類(派生類、衍生類),繼承是實現(xiàn)代碼復用的一種手段.多態(tài) - 同樣的引用類型調用相同的方法但是做了不同的事情
實現(xiàn)多態(tài)有兩個關鍵步驟: 1.方法重寫 ; 2.對象造型同樣的類型調用相同的方法(發(fā)同樣的消息)
但是用了不同的事情 - 這就是多態(tài)(polymorphism)如何實現(xiàn)多態(tài):
1.方法重寫 - 子類在繼承父類的過程中對父類的方法給出自己的實現(xiàn)版本
2.對象造型 - 用父類型的變量保存子類對象如果一個方法暫時無法給出實現(xiàn) 那么可以將其聲明為抽象方法
抽象方法需要用abstract關鍵字修飾且沒有方法體
如果一個類中有抽象方法(說明這個類不完整)那么必須被聲明為抽象類
抽象類不能實例化(不能創(chuàng)建抽象類的對象)
抽象類是專門留給其他類去繼承的類
重載 - 同一個類中有同名的方法 只要參數列表不相同就可以共存 - overload
重寫 - 子類繼承父類的過程中對父類已有方法給出新的實現(xiàn)版本 - override
我們能夠操控的內存:
棧 - 快间影、小 - 臨時變量/局部變量
堆 - 稍慢鹰贵、大 - 對象
方法區(qū) - 代碼晴氨、常量
temp在棧上 它保存了堆上的Cat對象的地址
通過temp就可以找到堆上的對應的Cat對象并給對象發(fā)消息
所以我們通常把對象類型的變量稱為對象的引用
Java中的類型就分為兩大類:基本數據類型(8種)和枚舉類型
引用類型
Java中有4種訪問修飾符:
private<default<protected<publicinstanceof運算符可以判斷對象是不是某種類型
該運算符在程序運行時判定對象的類型 - RTTI
接口
接口是方法聲明的集合
-
接口的三個關鍵點
- 接口代表能力
- 接口代表約定
- 接口代表角色
抽象類和接口本身不能實例化 但是可以使用就地實例化的方式來創(chuàng)建對象
所謂就地實例化實際上是創(chuàng)建了匿名內部類(anonymous inner type)的對象接口之間可以繼承的而且允許多重繼承(一個接口繼承多個接口)
Java8+ ---> Lambda表達式 ---> 匿名函數
- 僅限接口中只有一個方法且沒有默認方法的時候
okButton.addActionListener(e ->{
changeBgColor();
});
類和類之間簡單的說有三種關系:
- is-a - 繼承 - 學生和人
- has-a關系 - 關聯(lián)(聚合/合成) - 撲克和一張牌
- use-a關系 - 依賴 - 人和房子
類和它實現(xiàn)的接口之間的關系:
- play-a / like-a - 實現(xiàn)關系