1. 程式人生 > >java面向對象3

java面向對象3

out class 初始化 子類重寫 成員方法 上轉型 靜態變量 屬性 原形

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當中的一個類中在聲明一個類 就叫 內部類。
例如:

class Outter{ 成員變量; class Inner{ } 成員方法; }

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修飾的成員內部類叫做靜態內部類
定義格式如下:

class Outter{ static class inner{ } }

外部類不是靜態也可以聲明靜態內部類
靜態內部類 要類比 靜態成員變量
靜態內部類可以通過外類直接調用 new Outter.Inner();
靜態內部類內部可以直接訪問外部類中所有的靜態變量和方法(包含private)

13、局部內部類

定義在代碼塊、方法體等的類叫局部內部類。
—局部變量 類比
不能夠有 public protected private 以及 static 修飾

class Outter{ public void func(){ class inner{ } } }

局部內部類只是在一個方法或區域裏起作用

14、匿名內部類

沒有名字的局部內部類
必須要繼承一個父類或者實現一個接口
定義形式:
正常初始化對象:

類名 對象名=new 類名(); 匿名內部類: new 父類構造方法(){ //重寫一個函數 修飾符 返回參數類型 方法名(參數列表){ } };

局部內部類的區別 局部的位置不同
匿名內部類當中不能夠有靜態屬性和靜態方法
匿名內部類 不需要新建一個類 而是通過匿名的形式吧 實現方法的重寫
匿名內部類尤其針對 Android開發 例如 監聽 鼠標事件 鍵盤 觸屏輸入

Lisenter(){ @override MouseMoniter(){ } };

15、總結內部類

(1)成員內部類
(2)靜態內部類
(3)局部內部類
(4)匿名內部類
a、每個內部類都可以獨立的繼承或實現一個接口,而外部類也可以繼承一個直接父類。 —多繼承的一種表現
b、通過內部類可以實現對外界的隱藏。–封裝
c、內部類可以無限制的使用外部類的成員變量(包括私有),不用生成外部類的對象
d、匿名內部類可以簡化代碼的編寫,方便編寫事件驅動的程序、線程程序。
e、成員內部類 靜態內部類 可以對比 成員變量和靜態變量
局部內部類 匿名內部類 可以對比局部變量

16、面向對象總結

封裝 繼承 多態
面向對象的思路去設計程序

java面向對象3