抽象類
抽象類是指在類中,部分方法只有宣告、沒有實現的類,它是某一型別事物的抽象。
注意:抽象類是不能被例項化的(因為它是抽象的、不具體的類),它只能在繼承中發揮作用;而抽象方法也只能在子類中被重寫(實現)後才能用子類的物件呼叫。
例如,有乙個用於描述動物的 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 抽象類的方...