JAVA入門系統教程(七)物件導向(封裝2)

來源:互聯網
上載者:User

###物件導向(封裝2)###

1.Java中的內部類

1)什麼是內部類呢:內部類( Inner Class )就是定義在另外一個類裡面的類。與之對應,包含內部類的類被稱為外部類。

2)為什麼要將一個類定義在另一個類裡面呢

內部類的主要作用如下:

1> 內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同一個包中的其他類訪問該類

2> 內部類的方法可以直接存取外部類的所有資料,包括私人的資料

3> 內部類所實現的功能使用外部類同樣可以實現,只是有時使用內部類更方便

3)內部類有幾種呢:成員內部類、靜態內部類、方法內部類、匿名內部類

2.Java中的成員內部類

內部類中最常見的就是成員內部類,也稱為普通內部類。我們來看如下代碼:

從上面的代碼中我們可以看到,成員內部類的使用方法:

1、 Inner 類定義在 Outer 類的內部,相當於 Outer 類的一個成員變數的位置,Inner 類可以使用任意存取控制符,如 public 、 protected 、 private 等

2、 Inner 類中定義的 test() 方法可以直接存取 Outer 類中的資料,而不受存取控制符的影響,如直接存取 Outer 類中的私人屬性a

3、 定義了成員內部類後,必須使用外部類對象來建立內部類對象,而不能直接去 new 一個內部類對象,即:內部類 對象名 = 外部類對象.new 內部類( );

4、 編譯上面的程式後,會發現產生了兩個 .class 檔案

其中,第二個是外部類的 .class 檔案,第一個是內部類的 .class 檔案,即成員內部類的 .class 檔案總是這樣:外部類名$內部類名.class

另外,友情提示哦:

1、 外部類是不能直接使用內部類的成員和方法滴

可先建立內部類的對象,然後通過內部類的對象來訪問其成員變數和方法。

2、 如果外部類和內部類具有相同的成員變數或方法,內部類預設訪問自己的成員變數或方法,如果要訪問外部類的成員變數,可以使用 this 關鍵字。如:

例題:在編輯器中定義了成員內部類 Inner ,並在內部類的 show 方法中輸出外部類和內部類的屬性值。

3. Java中的靜態內部類

靜態內部類是 static 修飾的內部類,這種內部類的特點是:

1) 靜態內部類不能直接存取外部類的非靜態成員,但可以通過 new 外部類().成員 的方式訪問

2) 如果外部類的靜態成員與內部類的成員名稱相同,可通過“類名.靜態成員”訪問外部類的靜態成員;如果外部類的靜態成員與內部類的成員名稱不相同,則可通過“成員名”直接調用外部類的靜態成員

3) 建立靜態內部類的對象時,不需要外部類的對象,可以直接建立

內部類 對象名= new 內部類();

例:

4. Java中的方法內部類

方法內部類就是內部類定義在外部類的方法中,方法內部類只在該方法的內部可見,即只在該方法內可以使用。

PS:由於方法內部類不能在外部類的方法以外的地方使用,因此方法內部類不能使用存取控制符和 static 修飾符。

5. Math類的random方法

例:猜數字遊戲

6. 製作文檔說明

package example.make_api;/** * 當前這個ArrayTool這個類是針對數組操作的工具類,裡面提供了遍曆數組以及擷取數組的最大值和 * 尋找數組中第一次出現的索引這些功能 * @author 夢竹 * @version V1.0 */public class ArrayTool {/** * 無參構造私人化的目的,是為了不讓外界建立對象 */private ArrayTool() {}/** * 當前這個方法是針對數組遍曆的功能 * @param arr  是需要被遍曆的數組 */public static void printArray(int[] arr) {System.out.print("[");for(int x = 0 ; x < arr.length ;x ++) {//判斷if(x==arr.length-1) {System.out.println(arr[x]+"]");}else {System.out.print(arr[x]+", ");}}}/** * 當前getMax方法是擷取數組中最大值的方法 * @param arr  需要遍曆的數組 * @return     返回到就是數組中的最大值 */public static int getMax(int[] arr) {//定義一個參照物,假設為最大值int max = arr[0] ;//遍曆其他元素for(int x = 1; x < arr.length ;x ++) {//判斷if(arr[x] > max) {max = arr[x] ;}}return max ;}/** * 當前這個方法是尋找數組的某個元素在數組中第一次出現的索引 * @param arr   * @param value * @return */public static int getIndex(int[] arr,int value) {//假設找不到int index = -1 ;//遍曆數組for(int x = 0 ; x < arr.length ; x ++) {//判斷if(arr[x] == value) {//將當前x索引賦值給indexindex = x ;break ;}}return index ;}}
package example.make_api;/** * 需求:自訂一個數組,遍曆數組 * 製作文檔說明書: * 可以定義一個ArrayTool,數組操作的工具類 * 在工具類,必須文檔注釋,來讓解析成文檔 * 在數組工具類ArrayTool,提供遍曆功能,擷取最大值的,尋找數組中某個元素第一次出現的索引 *  *  * @author Administrator * */public class ArrayDemo {public static void main(String[] args) {//定義數組,靜態初始化int[] arr = {57,69,13,24,80} ;//測試//遍曆功能ArrayTool.printArray(arr);//最大值int max = ArrayTool.getMax(arr) ;System.out.println("最大值是:"+max);//求元素在數組中第一次參出現的索引int index = ArrayTool.getIndex(arr, 13) ;System.out.println("索引是:"+index);}}

此時找到兩個class檔案

Tool中刪除package example.make_api

Win+R呼出dos

####END####

相關文章:

JAVA入門系統教程(五)基礎文法(3)

JAVA入門系統教程(六)物件導向(封裝)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.