java面向對象3
1、訪問控制權限(public,private,protected,default)
public>protected>default>private
java中用來控制類及類的方法和變量訪問權限。
(1)public :公共的 表示包(package)內及包外的任何類(包括子類和普通類)都可以訪問。—最開放
(2)protected:受保護的 表示包內的任何類及包外繼承了該類的子類才能訪問,突出繼承。
(3)default:默認的 表示包內的任何類都可以訪問,但是包外的任何類都不能訪問。
(4)private:私有的 只有本類可以訪問,包內外的任何類均不能訪問。—封裝
訪問控制修飾符 | 同類 | 同包 | 子類 | 不同的包 |
public | 1 | 1 | 1 | 1 |
protected | 1 | 1 | 1 | 0 |
default | 1 | 1 | 0 | 0 |
private | 1 | 0 | 0 | 0 |
2、多態定義
多態分為編譯時的多態和運行時多態。其中編譯時多態 也可稱為靜態多態
運行時的多態為動態多態,主要通過動態綁定來實現,常說默認的多態
多態 為了應對不同的變現形式
3、靜態多態
其實就是 方法的重載,主要根據參數列表的不同來區分不同的函數
靜態多態 不需要繼承
4、動態多態
例如:品酒大師
三個杯子 倒了 3杯酒
酒 a= 五糧液;
酒 b= 茅臺酒;
酒 c= 二鍋頭。
聲明一個 酒的類,三種不同的酒 相當於不同的子類。
只有在運行時 才能知道 喝的什麽酒。
所謂動態多態就是指 引用在不同的情況下所表現的實際對象。
(1)繼承(實現接口)。在多態中必須存在 父類與子類的關系。
(2)重寫。子類必須對父類的某些方法進行重新定義,在調用這些方法時 就會調用子類的方法。
(3)向上轉型:父類引用指向子類的對象
5、向上轉型
向上轉型:子類的對象轉換為父類類型
例如:
Wine wine=new WLY();—向上轉型
Wine wine=new Wine();–正常實例化對象
子類的單獨定義的方法會丟失,能訪問子類重寫父類的方法
6、動態多態小案例–動物餵食
養了一堆寵物 有狗 有貓。寵物喜歡吃什麽 也要根據寵物的類型 來選擇餵食
狗–骨頭
貓–魚
if(animal is dog ){
food=bone;
eat food;
}else if(animal is cat){
food= fish;
eat fish.
}
可否寫一個方法 來實現所有寵物的餵食
7、向下轉型
向下轉型是把父類對象轉換為子類對象
Animal animal=new Animal();
Cat cat = (Cat)animal —-不對的
把一個動物強制轉換為 貓,如果這個動物是只狗,狗是變不成貓的
向下轉型必須得有向上轉型作為前提。因為只有子類相對應的才可以轉換
代表這個動物是 貓,之後 把動物再變回為貓。—打回原形
8、.內部類定義
在Java當中的一個類中在聲明一個類 就叫 內部類。
例如:
9、內部類分類
(1)(普通)成員內部類:與成員level一樣,內部類中不能存在 static 關鍵字,不能夠聲明靜態的方法、屬性、靜態代碼塊;
最普通的內部類
(2)靜態(成員)內部類:使用static修飾的成員內部類
(3)(普通)局部內部類:局部範圍內有效的內部類(例如:方法裏面)
(4)匿名(局部)內部類:沒有名字的局部內部類
3.成員內部類定義
(1)定義:與我們的成員變量一樣,可以聲明類名,在成員內部類中可以聲明屬性和方法
(2)作用:a、成員內部類可以無限制訪問外部類的變量和方法(包括private修飾的)
b、內部類可以有多個
c、成員內部類與外部類如果存在同名的成員變量或方法,優先是內部的。如果訪問外部類的
需要 Outter.this.(變量或方法名)
10、成員內部類與外部類的訪問
(1)成員內部類訪問外部類 無限制
(2)外部類訪問內部類的成員,不是無限制的。
首先要傳建一個內部類的對象,然後通過對象來訪問
11、成員內部類的初始化
不是在類裏面操作,如果是其他類要訪問時,要訪問內部類,首先實現外部類的實例化之後再實例化內部類
(1)在外部類對象初始化基礎之上初始化內部類,調用內部類的構造函數
Outter.Inner inner=outter.new Inner();
(2)通過外部類的成員方法獲得成員內部類的對象,然後訪問其變量和方法
12、靜態內部類
使用 static修飾的成員內部類叫做靜態內部類
定義格式如下:
外部類不是靜態也可以聲明靜態內部類
靜態內部類 要類比 靜態成員變量
靜態內部類可以通過外類直接調用 new Outter.Inner();
靜態內部類內部可以直接訪問外部類中所有的靜態變量和方法(包含private)
13、局部內部類
定義在代碼塊、方法體等的類叫局部內部類。
—局部變量 類比
不能夠有 public protected private 以及 static 修飾
局部內部類只是在一個方法或區域裏起作用
14、匿名內部類
沒有名字的局部內部類
必須要繼承一個父類或者實現一個接口
定義形式:
正常初始化對象:
局部內部類的區別 局部的位置不同
匿名內部類當中不能夠有靜態屬性和靜態方法
匿名內部類 不需要新建一個類 而是通過匿名的形式吧 實現方法的重寫
匿名內部類尤其針對 Android開發 例如 監聽 鼠標事件 鍵盤 觸屏輸入
15、總結內部類
(1)成員內部類
(2)靜態內部類
(3)局部內部類
(4)匿名內部類
a、每個內部類都可以獨立的繼承或實現一個接口,而外部類也可以繼承一個直接父類。 —多繼承的一種表現
b、通過內部類可以實現對外界的隱藏。–封裝
c、內部類可以無限制的使用外部類的成員變量(包括私有),不用生成外部類的對象
d、匿名內部類可以簡化代碼的編寫,方便編寫事件驅動的程序、線程程序。
e、成員內部類 靜態內部類 可以對比 成員變量和靜態變量
局部內部類 匿名內部類 可以對比局部變量
16、面向對象總結
封裝 繼承 多態
面向對象的思路去設計程序
java面向對象3