Java的抽象類

2021-07-15 04:01:40 字數 2119 閱讀 4185

抽象類

抽象類是指在類中,部分方法只有宣告、沒有實現的類,它是某一型別事物的抽象。

注意:抽象類是不能被例項化的(因為它是抽象的、不具體的類),它只能在繼承中發揮作用;而抽象方法也只能在子類中被重寫(實現)後才能用子類的物件呼叫。

例如,有乙個用於描述動物的 animal 父類,其中定義了 getinfo方法,用於獲取動物的相關資訊。它有三個子類,分別是描述馬的子類 horse,描述人的子類 person 和描述魚的子類 fish,如圖下所示。三個子類中都重寫了 getinfo 方法,用於根據具體的動物型別獲取相關資訊。

在這種情況下,父類的 getinfo 方法實際上是沒有必要確定實現細節。因為在子類中都對 getinfo 方法進行了重寫。之所以宣告父類的 getinfo 方法,可以理解為它只是子類的一種「規劃」,說明子類必須具備這樣的特性或功能。這時候,我們可以在類宣告時將animal類宣告為抽象的(用abstract作為非訪問修飾符),也就是說它是概括性的、不具體的類。

練習:

在 person 類中實現其抽象父類中的抽象方法。

目的:掌握抽象類和抽象方法的使用。

分析:該程式在 person 類中實現其抽象父類 animal 中的抽象方法 getinfo。

//建立抽象類animal 

abstract

class

animal

//建立子類person 實現父類animal的getinfo方法

class

person

extends

animal

//建立測試類呼叫子類方法

public

class

testabstract

}

使用抽象類和抽象方法還需要注意如下幾點:

⒈在乙個類中,如果有乙個方法是抽象的,該類就必須宣告為抽象的(當然,將不含有抽象方法的類宣告為抽象類也是可以的,不過很少這樣用)。

⒉如果子類沒有實現父類中所有的抽象方法,那麼該子類也必須宣告為抽象的。

⒊乙個類不能同時被宣告為 final 和 abstract。因為被宣告為final 的類是最終類,而被宣告為 abstract 的類又必須在子類化後才能使用,這是兩個相反意義的修飾符。

eg:對於每個幾何圖形而言,都有一些共同的屬性,如名字、面積,周長等,而計算不同幾何圖形的面積是各有不同。為了簡化開發,而且告訴其子類必須要計算幾何面積,可以在父類中定義乙個抽象方法,子類通過實現抽象方法計算其自身的面積。

⒈編寫 shape 類,該類是乙個抽象類,在該類中定義兩個方法,即 getname()方法和 gatarea()方法。getname 方法用反射機制獲得名稱,getarea()方法是乙個抽象方法。

public

abstract

class shape

public

abstract

double

getarea();

//獲得圖形的面積

}

⒉編寫 circle 類,該類繼承 shape 並實現了其抽象方法getarea()。在該類的構造方法中獲了圓形的半徑,以此在 getarea()中計算面積。

public

class

circle

extends

shape

public

double

getarea()

}

⒊編寫類 rectangle,該類繼承自 shape 並實現了抽象方法getatea()。在該類的構造方中,獲得矩形的長度和寬度,以此在getarea 計算其面積。

public

class

rectangle

extends

shape

}public

double

getarea()

⒋編寫 test 類用來測試。

public

class test

}

java的抽象類

b color black size x large 抽象類 size color b size small 在了解抽象類之前,先來了解一下抽象方法。抽象方法是一種特殊的方法 它只有宣告,而沒有具體的實現。抽象方法的宣告格式為 size color blue size large abstract ...

java抽象類抽象方法

抽象類 使用abstract關鍵字修飾的class,稱為抽象類 1 抽象類無法例項化 抽象方法 使用abstract關鍵字修飾的方法且沒有實現 有宣告無實現 稱為抽象方法 1 eg public abstract void method 2 沒有 3 抽象方法需要定義在抽象類中 抽象類和抽象方法 1...

Java 抽象類 介面

抽象類注重其是什麼以及其本質 介面注重具有什麼樣的功能以及充當什麼角色 抽象類使用abstract關鍵字來宣告,介面使用inte ce關鍵字來宣告 抽象類和介面都不能例項化,不能通過new來建立物件 抽象類的成員變數沒有任何限制 介面中的成員變數都是public static final 抽象類的方...