此種 class 的存在有以下幾點好處:
- inner class 可以直接存取 outer class 的 private 成員
- 當 inner class 僅被 outer class 一個 class 專屬使用時,相當適合使用
- 對外部隱藏 inner class 的存在
接著以下用簡單範例來說明:
一般的 inner class
PointDemo.java (outer class 宣告,其中有 inner class)
PointShow.javapublic class PointDemo {
//內部類別(Inner Class) ======= Begin
private class Point {
private int x, y;
public void setPoint(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
//內部類別(Inner Class) ======= End
private Point[] points;
public PointDemo(int length) {
points = new Point[length];
for(int i = 0 ; i < points.length ; i++) {
points[i] = new Point();
points[i].setPoint(i * 5, i * 5);
}
}
public void showPoints() {
for(int i = 0 ; i < points.length ; i++) {
System.out.printf("Point[%d]: x = %d, y = %d\n", i, points[i].getX(), points[i].getY());
}
}
}
public class PointShow {
public static void main(String[] args) {
PointDemo demo = new PointDemo(5);
demo.showPoints();
}
}
Anonymous Inner Class (匿名的內部類別)
此種 class 是沒有名稱的,直接宣告在定義的 object 之後,以下為範例說明:
AnonymousClassDemo.java
【註】若要在 inner class 中使用 outer class 的區域變數,必須要在該變數的宣告前加上「final」關鍵字,public class AnonymousClassDemo {
public static void main(String[] args) {
//Anonymous Class 就宣告在此
Object obj = new Object() {
public String toString() {
return "匿名類別物件";
}
};
System.out.println(obj);
}
}
package
這個部分較為容易,一般可使用自己的 domain name 作為 package name,如此一來與其他 package 名稱衝突的機會就會大大降低。而若非使用 default package,在檔案與目錄的結構上就會有所差異,以下有一段範例程式碼:
如此一來,目錄結構就會變成「$ClassPath/net/twcic/Point2D.class」,這樣 compiler 才知道要去哪裡找檔案進行編譯。package net.twcic;
public class Point2D {
private int x;
private int y;
public Point2D() {}
public Point2D(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
import
import 有分為一般的 import 以及在 SE 5.0 中所提供的 static import,一般的 import 比較容易就不說明了,以下給一段 static import 的程式碼:
當然,使用 import static 有可能會發生 method 名稱重複的問題,當然在 compiler 中會有其機制來處理這個問題,不過重要的還是在撰寫時,把名稱部分的細節給處理好才是正確之道。import static java.lang.System.out;
import static java.util.Arrays.sort;
public class ImportStaticDemo {
public static void main(String[] args) {
int[] array = {2, 5, 3, 1, 7, 6, 8};
//static method 已經 import 進來
sort(array);
for(int i = 0 ; i < array.length ; i++)
out.print(array[i] + " "); //static method 已經 import 進來
}
}
推薦參考連結
沒有留言:
張貼留言