面向對象特性_第1頁
面向對象特性_第2頁
面向對象特性_第3頁
面向對象特性_第4頁
面向對象特性_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第5章 面向對象的特性 Object Oriented Techniques 目錄 5.1面向對象特性面向對象特性 5.2抽象類抽象類 5.3接口接口 5.4內部類內部類 5.5異常類異常類 5.6泛型類泛型類 5.1 面向對象特性 面向過程的代碼面向過程的代碼 Procedure call Loose cohesion Tight coupling Redundancy Component B Goto D1 Component D Goto D1 D1: Change V1 to zero V1=V2-A1 Increment V1 Global: V1 V2 Common data ar

2、ea Component ZComponent XComponent Y Component A Component B Control data l Maintainability 可維護性可維護性 l Reusability 可重用性可重用性 l Extensibility 可擴展性可擴展性 Component A Component B Data Structure 5.1 面向對象特性 多態(tài)多態(tài) polymorphism 封裝封裝 Encapsulation 繼承繼承 Inheritance 抽象抽象 Abstraction 面向對象的代碼面向對象的代碼 Messaging l Mai

3、ntainability 可維護性可維護性 l Reusability 可重用性可重用性 l Extensibility 可擴展性可擴展性 1封裝性 多態(tài)多態(tài) polymorphism 繼承繼承 Inheritance 抽象抽象 Abstraction 封裝封裝 Encapsulation 封裝(封裝(Encapsulation) First Principle of OO 通過對象的封裝,實現了通過對象的封裝,實現了模塊化模塊化 通過對類和類的成員施以一定的通過對類和類的成員施以一定的訪問權限訪問權限,實現了,實現了信息信息 隱藏隱藏 javajava中的限定詞中的限定詞 同一個類同一個類同

4、一個包同一個包不同包的子類不同包的子類不同包非子類不同包非子類 private* default * protected* public* 1封裝性 未封裝未封裝的全局變量的全局變量 Box . x 可以造成系統(tǒng)中所有類之間產生緊耦合可以造成系統(tǒng)中所有類之間產生緊耦合 系統(tǒng)可維護性差系統(tǒng)可維護性差 1封裝性 Java中中實例實例變量變量最低限度最低限度的封裝的封裝 沒有封裝沒有封裝x的的身份身份 類的類的public成員構成類的成員構成類的輸出輸出API 1封裝性 隱藏隱藏實例成員變量實例成員變量 添加添加存取方法存取方法 解除對實例成員的耦合解除對實例成員的耦合 x從輸出從輸出API變成了類

5、的內部實現變成了類的內部實現 封裝成員的封裝成員的身份身份 getter setter(mutator) 1封裝性 x: String ? No Change! x成為成為Box的內部實現的內部實現 不再影響不再影響Client 防止修改防止修改 1封裝性 可維護性、冗余性可維護性、冗余性 對于易發(fā)生變化的成對于易發(fā)生變化的成 員,在內部訪問時使員,在內部訪問時使 用用存取方法存取方法 類的內部對成員的訪問類的內部對成員的訪問 1封裝性 封裝封裝引用類型引用類型成員成員 “myBox”在在Room中中 良好的封裝了嗎?良好的封裝了嗎? 1封裝性 封裝封裝引用類型引用類型成員成員 boxbox中

6、中x x是局部變量的拷是局部變量的拷 貝,局部變量貝,局部變量x x改變不影響改變不影響 boxbox狀態(tài)狀態(tài) 在在Room中進行中進行防御拷防御拷 貝(貝(defensive copy) 1封裝性 引用類型引用類型成員的成員的getter方法破壞封裝性方法破壞封裝性 getter方法破壞了方法破壞了Room對對 Box的封裝的封裝 1封裝性 不可變更類不可變更類 封裝性、安全性的考慮封裝性、安全性的考慮 不可變更類的實例一旦被創(chuàng)建,其狀態(tài)就不會發(fā)生變化不可變更類的實例一旦被創(chuàng)建,其狀態(tài)就不會發(fā)生變化 String、基本數據類型的類包裝器、基本數據類型的類包裝器 特點:特點: “private

7、”成員屬性成員屬性 成員沒有成員沒有setter方法方法 “final”class “final”成員屬性成員屬性 通常不提供可變成員的通常不提供可變成員的getter方法方法 通常不在構造函數中引用外部可變對象通常不在構造函數中引用外部可變對象 線程安全線程安全 實例可以被重用(對象池)實例可以被重用(對象池) 享元模式享元模式( flyweight design pattern ) 1封裝性 防御拷貝(防御拷貝(defensive copy) 防御拷貝應該在參數有防御拷貝應該在參數有 效性驗證效性驗證之前之前 參數有效性驗證必須針參數有效性驗證必須針 對對拷貝后拷貝后的變量的變量 1封裝性

8、 防御拷貝(防御拷貝(defensive copy) 返回可變對象的防御拷返回可變對象的防御拷 貝貝 封裝性 總結 最大限度的降低數據的可見性最大限度的降低數據的可見性 謹慎設計和輸出公共謹慎設計和輸出公共API 耦合性耦合性 可維護性可維護性 可擴展性可擴展性 public protected default private exported API implementation package 封裝性 總結 公共的類構成了包(一個子系統(tǒng))的外觀公共的類構成了包(一個子系統(tǒng))的外觀 ( faade ) 當一個類只被一個其他類訪問的時候,可以作為該當一個類只被一個其他類訪問的時候,可以作為該

9、類的內部類類的內部類 ( innner class) 不能因為測試類的正確性,而提高其可見性不能因為測試類的正確性,而提高其可見性 如果包中一個類頻繁訪問另一個類的成員變量時,如果包中一個類頻繁訪問另一個類的成員變量時, 應考慮重構設計應考慮重構設計 包對類的封裝性包對類的封裝性 public class 封裝性 總結 類不應該直接暴露成員變量(類不應該直接暴露成員變量(fields) 反例反例:java.awt.Point,java.awt.Dimension 類的成員變量應盡可能設置為私有的(類的成員變量應盡可能設置為私有的(private) “static final”可以設置為公有,但

10、必須為簡單類型可以設置為公有,但必須為簡單類型 或不可變的引用類型或不可變的引用類型 “protected”會引起成員變?yōu)闀鸪蓡T變?yōu)锳PI的一部分的一部分 根據類是否為可變類型,來提供相應的根據類是否為可變類型,來提供相應的getter和和setter 對于可變的對于可變的引用成員引用成員變量,在構造函數和變量,在構造函數和getter方法方法 中使用防御拷貝中使用防御拷貝 在類的內部對不穩(wěn)定的屬性,使用在類的內部對不穩(wěn)定的屬性,使用getter和和setter訪問訪問 類對成員的封裝性類對成員的封裝性 2繼承性(Inheritance) 實現實現代碼復用代碼復用 組合(組合(has-a)

11、 繼承(繼承(is-a) 把一些類的共性再把一些類的共性再抽取抽取出來,放到一個類中,稱為出來,放到一個類中,稱為 父類父類 具有特殊屬性的新類繼承父類的狀態(tài)和行為,稱為具有特殊屬性的新類繼承父類的狀態(tài)和行為,稱為 子類子類 子類繼承了父類的屬性和方法子類繼承了父類的屬性和方法(不包括構造方法不包括構造方法),同,同 時也可以擁有自己的屬性和方法時也可以擁有自己的屬性和方法 繼承具有傳遞性繼承具有傳遞性 父類可以是父類可以是Java類庫中的類,也可以是自己編寫的類類庫中的類,也可以是自己編寫的類 Java中每個類只能有一個直接父類,稱為中每個類只能有一個直接父類,稱為單繼承單繼承 2繼承性(I

12、nheritance) 2繼承性(Inheritance) 我吃素,可脾氣我吃素,可脾氣 不太好不太好 2繼承性(Inheritance) 在狗群中,吠叫聲是個在狗群中,吠叫聲是個 很重要的事情,該聲音很重要的事情,該聲音 必須有代表性和獨一無必須有代表性和獨一無 二性二性 2繼承性(Inheritance) 對呀,對呀,LionLion、TigerTiger 和和CatCat之間有共同的部分之間有共同的部分 狼和狗之間也可以狼和狗之間也可以 共享某些東西共享某些東西 2繼承性(Inheritance) 它們都是它們都是 貓科動物貓科動物 它們都是它們都是 犬齒動物犬齒動物 2繼承性(Inhe

13、ritance) 創(chuàng)建子類創(chuàng)建子類 class SubClass extends SuperClass java中所有的類都是通過直接或間接地繼承中所有的類都是通過直接或間接地繼承java.lang.Object 類得到的,如果一個類沒使用類得到的,如果一個類沒使用extends,該類被系統(tǒng)默認為,該類被系統(tǒng)默認為 是是Object類的子類。類的子類。 java不支持多重繼承不支持多重繼承。 子類不能繼承父類中權限為子類不能繼承父類中權限為private的成員變量和方法。的成員變量和方法。 2繼承性 子類繼承父類的變量和方法可以被子類自身定義的方子類繼承父類的變量和方法可以被子類自身定義的方

14、法所訪問法所訪問 子類和父類在同一包中,子類繼承父類中不是子類和父類在同一包中,子類繼承父類中不是 private的成員變量和方法的成員變量和方法 子類和父類不在同一包中,子類繼承父類中的子類和父類不在同一包中,子類繼承父類中的 protected, public成員變量和方法成員變量和方法 繼承的成員變量及方法的訪問權限保持不變繼承的成員變量及方法的訪問權限保持不變 下面我們看一個下面我們看一個例子例子。 程序的運行結果見下圖程序的運行結果見下圖 5.3 子類對象的構造過程 當用子類的構造方法創(chuàng)建一個子類的對象時當用子類的構造方法創(chuàng)建一個子類的對象時,子類總子類總 是先調用是先調用父類的構造

15、方法父類的構造方法,如果子類的構造方法中沒,如果子類的構造方法中沒 有顯式指明使用哪一個構造方法,子類調用父類有顯式指明使用哪一個構造方法,子類調用父類不帶不帶 參數參數的構造方法。的構造方法。 (1)將子類中聲明的成員變量做為子類對象的成員變)將子類中聲明的成員變量做為子類對象的成員變 量量 (2)父類的成員變量也都分配了內存空間,但只將其)父類的成員變量也都分配了內存空間,但只將其 中一部分(繼承的那部分)做為子類對象的成員變量。中一部分(繼承的那部分)做為子類對象的成員變量。 子類未繼承的成員子類未繼承的成員 子類未繼承的成員子類未繼承的成員 引用引用 子類對象子類對象 子類繼承的成員子

16、類繼承的成員 子類繼承的成員子類繼承的成員 子類聲明的成員子類聲明的成員 子類聲明的成員子類聲明的成員 子類對象內存示意圖子類對象內存示意圖 5.4 成員的覆蓋(隱藏) 子類擁有與父類相同的成員的情況稱為覆蓋子類擁有與父類相同的成員的情況稱為覆蓋 (override) 子類通過覆蓋父類的子類通過覆蓋父類的成員變量成員變量和和方法方法,可以把父,可以把父 類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。 成員變量的覆蓋:變量名相同成員變量的覆蓋:變量名相同 成員方法的覆蓋:返回值類型、方法名、形式成員方法的覆蓋:返回值類型、方法名、形式 參數都相同參數都相同 5.4.

17、1 成員變量的隱藏(覆蓋) 子類中定義的成員變量與父類中的成員變量同名時子類中定義的成員變量與父類中的成員變量同名時 (不必類型相同不必類型相同),子類就隱藏了),子類就隱藏了繼承的繼承的成員變量成員變量 父類的方法會看到原來的變量,而子類的方法看到的父類的方法會看到原來的變量,而子類的方法看到的 則是新則是新“版本版本”的變量的變量 成員變量的隱藏成員變量的隱藏 例例5-3 成員變量的隱藏(覆蓋) 例如:例如:class IntegerCalculator int sum; class DecimalCalculator extends IntegerCalculator double su

18、m; 類類DecimalCalculator 從從IntegerCalculator中繼承的方法將中繼承的方法將 看到整型變量,而看到整型變量,而DecimalCalculator類中定義的方法則會類中定義的方法則會 看到浮點型變量看到浮點型變量 如果需在如果需在DecimalCalculator類內引用從類內引用從IntegerCalculator 繼承得到的同名變量,需要使用繼承得到的同名變量,需要使用super int s = super.sum; 5.4.2 方法的覆蓋(重寫 override) 子類定義一個方法,該方法的名字、子類定義一個方法,該方法的名字、返回類型返回類型、參數個、

19、參數個 數和類型與從父類繼承的方法數和類型與從父類繼承的方法完全相同完全相同 如果子類重寫了父類的方法,就隱藏了繼承的方法,子如果子類重寫了父類的方法,就隱藏了繼承的方法,子 類對象調用該方法則調用的是重寫的方法,要調用被隱類對象調用該方法則調用的是重寫的方法,要調用被隱 藏的方法則必須使用藏的方法則必須使用super關鍵字關鍵字 重寫的方法既可以操作繼承的成員變量,也可以操作子重寫的方法既可以操作繼承的成員變量,也可以操作子 類聲明定義的成員變量類聲明定義的成員變量 子類通過方法的重寫可以把父類的狀態(tài)和行為改變?yōu)樽宰宇愅ㄟ^方法的重寫可以把父類的狀態(tài)和行為改變?yōu)樽?身的狀態(tài)和行為身的狀態(tài)和行為

20、 方法重寫方法重寫例例5-4 【Method1.java】 class A int x; void setX( ) x=0; class B extends A int x; /隱藏了父類的隱藏了父類的 x x void setX( ) x=5; 5.4.2 方法的覆蓋(重寫 override) 注意:注意: 從從JDK5.0開始,在重寫方法時可以返回父類方法開始,在重寫方法時可以返回父類方法 返回值類型的子類型返回值類型的子類型 例子:例子:Chicken.java 5.4.2 方法的覆蓋(重寫 override) 5.4.2 方法的覆蓋(重寫 override) 方法重寫的兩種方法重寫的兩

21、種失敗失敗情況:情況: 方法名相同,參數個數和類型相同,但返回類型不同方法名相同,參數個數和類型相同,但返回類型不同(或或 不是父類方法返回類型的子類不是父類方法返回類型的子類),出現,出現編譯錯誤編譯錯誤 方法名相同,參數個數和類型有不同,稱為重載的方法方法名相同,參數個數和類型有不同,稱為重載的方法 重寫父類方法時,不可以降低方法的訪問權限重寫父類方法時,不可以降低方法的訪問權限 父類中的一個靜態(tài)方法可以由子類中的另一個靜態(tài)方法父類中的一個靜態(tài)方法可以由子類中的另一個靜態(tài)方法 所遮蔽,但不能用一個非靜態(tài)方法來覆蓋一個靜態(tài)方法所遮蔽,但不能用一個非靜態(tài)方法來覆蓋一個靜態(tài)方法 5.4.3 訪問

22、修飾符protected的進一步說明 一個類一個類A A中的中的protectedprotected成員變量和方法可以被它的直接子類成員變量和方法可以被它的直接子類 和間接子類繼承,比如和間接子類繼承,比如B B是是A A的子類,的子類,C C是是B B的子類的子類 ,D D又是又是C C 的子類,那么的子類,那么B B、C C和和D D類都繼承了類都繼承了A A的的 protectedprotected成員變量和成員變量和 方法。方法。 如果用如果用D D類在類在D D本身中創(chuàng)建了一個本身中創(chuàng)建了一個D D類的對象(類的對象(在在D D中創(chuàng)建中創(chuàng)建A A的的 對象不一定能訪問對象不一定能訪問

23、protectedprotected成員,取決于成員,取決于A A和和D D是否在同一是否在同一 個包個包),那么該對象總是可以通過),那么該對象總是可以通過“.”.”運算符訪問繼承的運算符訪問繼承的 或自己定義的或自己定義的protectedprotected變量和變量和protectedprotected方法的,但是,如方法的,但是,如 果在另外一個類中,比如果在另外一個類中,比如E E類,用類,用D D類創(chuàng)建了一個對象類創(chuàng)建了一個對象objectobject, 該對象通過該對象通過“.”.”運算符訪問運算符訪問protectedprotected變量和變量和protectedprotec

24、ted方方 法的權限如下列(法的權限如下列(a a)、()、(b b)所述。)所述。 (a a)子類)子類D D的的protectedprotected成員變量和方法,如果不是從成員變量和方法,如果不是從 父類繼承來的,父類繼承來的,objectobject訪問這些訪問這些protectedprotected成員變量和方法成員變量和方法 時,只要時,只要E E類和類和D D類在同一個包中就可以了。類在同一個包中就可以了。 (b b)如果子類)如果子類D D的對象的的對象的protectedprotected成員變量或成員變量或 protectedprotected方法是從父類繼承的,那么就要一

25、直追溯到該方法是從父類繼承的,那么就要一直追溯到該 protectedprotected成員變量或方法的成員變量或方法的“祖先祖先”類,即類,即A A類,如果類,如果E E類類 和和A A類在同一個包中,類在同一個包中,objectobject對象能訪問繼承的對象能訪問繼承的protectedprotected 變量和變量和protectedprotected方法。方法。 例子:例子:ProtectRightProtectRight ProtectSubProtectSub this this用來引用當前變量和方法。用來引用當前變量和方法。 訪問成員變量。訪問成員變量。 如:this.vari

26、able; 調用方法。調用方法。 如:this.Method(paramlist); 調用類的其他構造方法。調用類的其他構造方法。 如:this(paramlist); 5.5 關鍵字super java中通過中通過super來實現對來實現對父類成員父類成員的訪問,的訪問,super用用 來引用當前對象的父類。來引用當前對象的父類。 訪問父類被隱藏的成員變量。訪問父類被隱藏的成員變量。 如:super.variable; 調用父類中被重寫的方法。調用父類中被重寫的方法。 如:super.Method(paramlist); 調用父類的構造方法。調用父類的構造方法。 如:super(paraml

27、ist); 例例5-6 、Inheritance. java 、SuperTest.java 5.5 關鍵字super 注意:注意: 如果在父類中沒有無參數的構造函數,則在子如果在父類中沒有無參數的構造函數,則在子 類的構造函數中必須用類的構造函數中必須用super顯式調用父類的顯式調用父類的 某個構造函數某個構造函數 例子:例子:RDemoTest.java 5.5 關鍵字super 一種常見的做法是子類中的一個覆蓋得到的方法完成一一種常見的做法是子類中的一個覆蓋得到的方法完成一 些預備的工作,然后再交由父類中的覆蓋方法來完成任些預備的工作,然后再交由父類中的覆蓋方法來完成任 務務 clas

28、s Animal void eat (Food f) /消化食物消化食物 class Cat extends Animal void eat (Food f) / 檢查是否可信用檢查是否可信用 super.eat(f); 5.6 final 類和final方法 final final類不能被繼承,即不能有子類,如:類不能被繼承,即不能有子類,如: final class A final class A 一個方法被修飾為一個方法被修飾為finalfinal方法,則這個方法不能被重寫,即方法,則這個方法不能被重寫,即 不允許子類通過重寫隱藏繼承的不允許子類通過重寫隱藏繼承的finalfinal方法

29、。方法。 5.7 對象的上轉型對象 假設,假設,B B是是A A的子類或間接子類,當我們用子類的子類或間接子類,當我們用子類B B創(chuàng)建一個創(chuàng)建一個 對象,并把這個對象的引用放到對象,并把這個對象的引用放到A A類聲明的對象引用中時,類聲明的對象引用中時, 比如:比如: A aA a; B b = new B();B b = new B(); a=b; a=b; 則則a a是子類對象是子類對象b b的的上轉型對象上轉型對象,對象的上轉型對象的,對象的上轉型對象的實實 體是子類負責創(chuàng)建體是子類負責創(chuàng)建的,但上轉型對象會失去原對象的一的,但上轉型對象會失去原對象的一 些屬性和功能。些屬性和功能。 5

30、.7 對象的上轉型對象 (1 1)上轉型對象不能操作子類聲明定義的成)上轉型對象不能操作子類聲明定義的成 員變量;也不能使用子類聲明定義的方法。員變量;也不能使用子類聲明定義的方法。 (2 2)上轉型對象可以調用子類重寫的)上轉型對象可以調用子類重寫的實例實例方方 法。法。 (3 3)上轉型對象可以調用子類繼承的成員變)上轉型對象可以調用子類繼承的成員變 量和隱藏的成員變量。量和隱藏的成員變量。 (4 4)可以將對象的上轉型對象再強制轉換到)可以將對象的上轉型對象再強制轉換到 一個子類對象,這時,該子類對象又具備了子類一個子類對象,這時,該子類對象又具備了子類 所有屬性和功能所有屬性和功能 (

31、5 5)如果子類重寫了父類中的)如果子類重寫了父類中的類類方法,通過方法,通過 上轉型對象引用的是父類中的類方法上轉型對象引用的是父類中的類方法 對象的上轉型對象 可以將對象的上轉型對象再可以將對象的上轉型對象再強制轉換強制轉換到一個子類對象,這時,到一個子類對象,這時, 該子類對象又具備了子類所有屬性和功能。該子類對象又具備了子類所有屬性和功能。 例子例子 Example8.java 不要將父類創(chuàng)建的對象和子類對象的上轉型對象混淆。不要將父類創(chuàng)建的對象和子類對象的上轉型對象混淆。 子類對象子類對象 對象的上轉型對象對象的上轉型對象 繼承或隱藏的成員變量繼承或隱藏的成員變量 繼承或覆蓋的方法繼

32、承或覆蓋的方法 新增的變量新增的變量 新增的方法新增的方法 上轉型對象的特點圖上轉型對象的特點圖 5.15 內部類(Inner Class) 內部類內部類 匿名類匿名類 1 內部類 定義:內部類是在一個類的內部嵌套定義的類。定義:內部類是在一個類的內部嵌套定義的類。 范圍:范圍: 可以是其它類的成員可以是其它類的成員 在一個語句塊的內部定義在一個語句塊的內部定義 在表達式內部匿名定義在表達式內部匿名定義 特性:特性: 一般用在定義它的類或語句塊之內,在外部引用它一般用在定義它的類或語句塊之內,在外部引用它 時必須給出時必須給出完整的名稱完整的名稱,名字不能與包含它的類名,名字不能與包含它的類名

33、 相同。相同。 內部類的特性 可以聲明為可以聲明為abstract 、public、private、default或或 protected 。 內部類都是一個獨立的類,編譯完后的內部類都是一個獨立的類,編譯完后的.class文件名以文件名以“外外 部類類名部類類名$內部類類名內部類類名.class”的形式出現的形式出現 編譯如下例子:編譯如下例子: class Animal class Brain 編譯生成了兩個編譯生成了兩個.class文件:文件:Animal.class和和 Animal$Brain.class ; 編譯器將內部類創(chuàng)建為一個正常的頂級類,并為之命名編譯器將內部類創(chuàng)建為一個正

34、常的頂級類,并為之命名 內部類(Inner Class) 定義:內部類是在一個類的內部嵌套定義的類。定義:內部類是在一個類的內部嵌套定義的類。 種類:種類: 非靜態(tài)內部類:作為類的成員非靜態(tài)內部類:作為類的成員 靜態(tài)內部類:作為類的靜態(tài)成員靜態(tài)內部類:作為類的靜態(tài)成員 局部內部類:存在某個方法內部的類局部內部類:存在某個方法內部的類 匿名類:存在某個類的內部,但無名稱的類匿名類:存在某個類的內部,但無名稱的類 1.非靜態(tài)內部類 非靜態(tài)成員內部類作為外部類或外部接口的成員,非靜態(tài)成員內部類作為外部類或外部接口的成員, 不帶有關鍵字不帶有關鍵字static。 定義非靜態(tài)成員內部類等同于定義一個類的

35、非靜定義非靜態(tài)成員內部類等同于定義一個類的非靜 態(tài)成員屬性或方法態(tài)成員屬性或方法 1.非靜態(tài)內部類 非靜態(tài)成員內部類有如下性質非靜態(tài)成員內部類有如下性質 (1) 在非靜態(tài)成員內部類中,如果是訪問自己定義的屬在非靜態(tài)成員內部類中,如果是訪問自己定義的屬 性,可以直接訪問,也可以通過性,可以直接訪問,也可以通過this關鍵字來訪問。關鍵字來訪問。 1.非靜態(tài)內部類 非靜態(tài)成員內部類有如下性質非靜態(tài)成員內部類有如下性質 (2) 在非靜態(tài)成員內部類中,可以訪問外部類的所有在非靜態(tài)成員內部類中,可以訪問外部類的所有 成員,包括成員,包括private修飾的以及修飾的以及靜態(tài)成員靜態(tài)成員。 1.非靜態(tài)內部

36、類 非靜態(tài)成員內部類有如下性質非靜態(tài)成員內部類有如下性質 (3) 在非靜態(tài)成員內部類中,如果外部類和內部類定義的屬在非靜態(tài)成員內部類中,如果外部類和內部類定義的屬 性同名,可以通過性同名,可以通過“外部類類名外部類類名.this.外部類成員變量名外部類成員變量名” 的形式來訪問。的形式來訪問。 1.非靜態(tài)成員內部類 非靜態(tài)成員內部類有如下性質非靜態(tài)成員內部類有如下性質 (4) 在非靜態(tài)成員內部類中,不能聲明靜態(tài)成員。在非靜態(tài)成員內部類中,不能聲明靜態(tài)成員。 1.非靜態(tài)成員內部類 非靜態(tài)成員內部類的實例化非靜態(tài)成員內部類的實例化 只有創(chuàng)建了外部類對象的情況下才能創(chuàng)建非只有創(chuàng)建了外部類對象的情況下

37、才能創(chuàng)建非靜態(tài)靜態(tài)內部內部 類對象類對象。 2. 靜態(tài)內部類 用用static修飾的內部類叫靜態(tài)內部類修飾的內部類叫靜態(tài)內部類 靜態(tài)內部類相當于是一個外部定義的類,可聲明靜態(tài)成員或非靜態(tài)內部類相當于是一個外部定義的類,可聲明靜態(tài)成員或非 靜態(tài)成員靜態(tài)成員 2. 靜態(tài)內部類 靜態(tài)內部類可以被視為頂層類的靜態(tài)成員,可在不創(chuàng)建頂層類靜態(tài)內部類可以被視為頂層類的靜態(tài)成員,可在不創(chuàng)建頂層類 對象的情況下被使用,這是與非靜態(tài)內部類的區(qū)別對象的情況下被使用,這是與非靜態(tài)內部類的區(qū)別 2. 靜態(tài)內部類 靜態(tài)內部類只能訪問外部類的靜態(tài)變量或靜態(tài)方法,非靜態(tài)的靜態(tài)內部類只能訪問外部類的靜態(tài)變量或靜態(tài)方法,非靜態(tài)的 不能訪問不能訪問 2. 靜態(tài)內部類 靜態(tài)內部類可以作為接口的一部分靜態(tài)內部類可以作為接口的一部分 3. 局部內部類 局部內部類也叫方法內部類,即在方法內部定義的內部類局部內部類也叫方法內部類,即在方法內部定義的內部類 不能用訪問修飾符修飾,只能加不能用訪問修飾符修飾,只能加final、abstract修飾修飾 3. 局部內部類 局部內部類有如下性質局部內部類有如下性質 (1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論