#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 內部類別();
例如範例:
PS:由於方法內部類別不能在外部類別的方法以外的地方使用,因此方法內部類別不能使用存取控制符和static 修飾符。
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索引赋值给index index = 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入門系統教學(六)物件導向(封裝)######以上是JAVA入門系統教學(七)物件導向(封裝2)的詳細內容。更多資訊請關注PHP中文網其他相關文章!