基礎程式設計(17)-類別的種類

套件(Package)

在一支程式裡可能會有很多個類別,Java把這支程式稱作套件(Package)。在一個套件之中,只能有一個類別是 public 屬性,而且是主程式 main() 所在的類別,程式檔案名稱和 public 類別名稱相同。

除了 public 與一般不加修飾字的普通類別外,還有常數類別(final)與抽象類別(abstract)。

常數類別(final)

宣告成 final 的類別「不能被繼承」,而宣告 final 的方法則是「不能被覆寫」。final的建立是為了保密防止子類別建立,存取或覆寫原本的操作,或著是為了其它的設計需求。宣告範例如下:

final class 類別名稱 {
    ...
    final int getValue() { return 0; }
    ...
}

抽象類別(abstract)

宣告成 abstract 的類別不能建立物件,只能被繼承,目的在建立類別的原型。若是宣告 abstract 方法,表示這只是一個原型宣告,實作的程式碼只能在子類別建立,且繼承者一定要實作。有抽象方法的類別,一定是一個抽象類別。參考的範例如下:

abstract class Shape
{
    public double x;
    public double y;
    abstract double area();
}

class Cricle extents Shape
{
    public double r;
    public Circle(double r) {
        this.r = r;
    }
    public void area() {
        System.out.print(3.1416*r*r);
    }
}

巢狀類別

巢狀類別主要是用來強調類別之間的關係,成員類別稱為內層類別(Inner Classes)。由於內層類別也是外層類別的成員,因此即使有宣告成 private 的方法或屬性,依然可以直接存取。

由於Java檔案只能擁有一個 public 類別,若把外層類別宣告成 public,則內層類別也有 public 的存取權限。另外,內層類別一定是副本,所以不能宣告成 static。只有當外層類別存在時,內層類別才會存在。參考程式碼如下:

class Card //外層類別
{
    private Phone list; //物件變數

    class Phone //內層類別
    {
        ...
    }

    public Card() {
        list = new Phone(); //建立物件
    }
    ...
}
public class test
{
    public static void main(String[] args) {
        Card c1 = new Card();
        Card.Phone p1 = c1.new Phone(); //獨立宣告內層類別
    }
}