C語言中文網 目錄

Java抽象(abstract)類

< 上一頁Java多態性 Java接口下一頁 >

如果一個類只定義了一個為所有子類共享的一般形式,至于細節則交給每一個子類去實現,這種類沒有任何具體的實例,只具有一些抽象的概念,那么這樣的類稱為抽象類

在面向對象領域,抽象類主要用來進行類型隱藏。比如,如果我們進行一個圖形編輯軟件的開發,就會發現問題領域存在著圓、三角形這樣一些具體概念,它們是不同的,但是它們都屬于形狀這樣一個概念,形狀這個概念在問題領域是不存在的,它就是一個抽象概念。正是因為抽象概念在問題領域沒有對應的具體概念,所以用以表征抽象概念的抽象類是不能夠實例化的。

Java 中抽象類的語法格式如下:
<abstract>class<class_name>
{
    <abstract><type><method_name>(parameter-iist);
}

其中,abstract 表示該類或該方法是抽象的;class_name 表示抽象類的名稱;method_name 表示抽象方法名稱,如果在一個方法之前使用 abstract 來修飾,則說明該方法是抽象方法,不能有方法體;parameter-list 表示方法參數列表。

注意:abstract 關鍵字只能用于普通方法,不能用于 static 方法或者構造方法中。在抽象類中必須包含至少一個抽象方法,并且所有抽象方法不能有具體的實現,而應在它們的子類中實現所有的抽象方法(要有方法體)。

包含一個或多個抽象方法的類必須通過在其 class 聲明前添加 abstract 關鍵字將其聲明為抽象類。因為一個抽象類不定義完整的實現,所以抽象類也就沒有自己的對象。因此,任何使用 new 創建抽象類對象的嘗試都會導致編譯時錯誤。

例 1

不同幾何圖形的面積計算公式是不同的,但是它們具有的特性是相同的,都具有長和寬這兩個屬性,也都具有面積計算的方法。那么可以定義一個抽象類,在該抽象類中含有兩個屬性(width 和 height)和一個抽象方法 area(),具體步驟如下。

(1) 首先創建一個表示圖形的抽象類 Shape,代碼如下所示。
public abstract class Shape
{
    public int width;    //幾何圖形的長
    public int height;    //幾何圖形的寬
    public Shape(int width,int height)
    {
        this.width=width;
        this.height=height;
    }
    public abstract double area();    //定義抽象方法,計算面積
}

(2) 定義一個正方形類,該類繼承自形狀類 Shape,并重寫了 area() 抽象方法。正方形類的代碼如下:
public class Square extends Shape
{
    public Square(int width,int height)
    {
        super(width,height);
    }
    //重寫父類中的抽象方法,實現計算正方形面積的功能
    @Override
    public double area()
    {
        return width*height;
    }
}

(3) 定義一個三角形類,該類與正方形類一樣,需要繼承形狀類 Shape,并重寫父類中的抽象方法 area()。三角形類的代碼實現如下:
public class Triangle extends Shape
{
    public Triangle(int width,int height)
    {
        super(width, height);
    }
    //重寫父類中的抽象方法,實現計算三角形面積的功能
    @Override
    public double area()
    {
        return 0.5*width*height;
    }
}

(4) 最后創建一個測試類,分別創建正方形類和三角形類的對象,并調用各類中的 area() 方法,打印出不同形狀的幾何圖形的面積。測試類的代碼如下:
public class ShapeTest
{
    public static void main(String[] args)
    {
        Square square=new Square(5,4);    //創建正方形類對象
        System.out.println("正方形的面積為:"+square.area());
        Triangle triangle=new Triangle(2,5);    //創建三角形類對象
        System.out.println("三角形的面積為:"+triangle.area());
    }
}

在該程序中,創建了 4 個類,分別為圖形類 Shape、正方形類 Square、三角形類 Triangle 和測試類 ShapeTest。其中圖形類 Shape 是一個抽象類,創建了兩個屬性,分別為圖形的長度和寬度,并通過構造方法 Shape() 給這兩個屬性賦值。

在 Shape 類的最后定義了一個抽象方 法 area(),用來計算圖形的面積。在這里,Shape 類只是定義了計算圖形面積的方法,而對于如何計算并沒有任何限制。也可以這樣理解,抽象類 Shape 僅定義了子類的一般形式。

正方形類 Square 繼承抽象類 Shape,并實現了抽象方法 area()。三角形類 Triangle 的實現和正方形類相同,這里不再介紹。

在測試類 ShapeTest 的 main() 方法中,首先創建了正方形類和三角形類的實例化對象 square 和 triangle,然后分別調用 area() 方法實現了面積的計算功能。

(5) 運行該程序,輸出的結果如下:
正方形的面積為:20.0
三角形的面積為:5.0
< 上一頁Java多態性 Java接口下一頁 >

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo