Java學習之抽象類

2021-09-24 12:32:50 字數 1920 閱讀 1263

當編寫乙個類的時候,常常考慮為該類定義一些方法,用以描述該類的行為方式,那麼這些方法都是具體的方法體,但是在某些情況下,某些父類只知道其子類應該包含怎樣的方法,但是無法知道子類如何實現這些方法,這裡就出現了抽象類以及抽象方法。

抽象方法和抽象類必須使用abstract修飾符來修飾,有抽象方法的類必須被定義為抽象類,而抽象類裡可以沒有抽象方法。

抽象類和抽象方法的定義規則如下:

抽象類和抽象方法都必須使用abstract來修飾,並且抽象方法沒有方法體。

抽象類不能被例項化,無法使用new關鍵字來呼叫抽象類構造器建立抽象類的例項,即使抽象類中沒有抽象方法,也不能建立例項。

抽象類中可以包含五種成分,成員變數,方法,初始化塊,構造器,內部類。

包含抽象方法的類只能被定義為抽象類。

定義抽象方法只需在普通方法前面加abstract修飾符,然後去掉方法體(就是花括號中的部分)。

看下面的**:

public abstract class shape 

private string color;

public abstract double calperimeter();

public abstract string gettype();

public shape(){};

//構造器並不是用於建立shape物件,而是用於被子類呼叫

public shape(string color)

public void setcolor(string color)

public string getcolor()

}

在上面的**中包含兩個抽象方法,calperimeter和gettype,並且shape中包含了初始化塊,構造器,這些不是用於建立父類物件,而是在建立子類例項的時候被呼叫,因為子類繼承了父類。

下面定義乙個三角形類:

public class ******** extends shape 

public void setside(double a,double b,double c)

public double calperimeter()

public string gettype()

}

因為三角形類被定義為普通類,所以必須 實現shape中的所有抽象方法。

下面再定義乙個triange類繼承shape類,並且實現shape類中的抽象方法。

public class circle extends shape 

public void setradius(double radius)

@override

public double calperimeter()

@override

public string gettype()

public static void main(string args)

}

**編譯結果:

初始化執行shape構造器

初始化執行shape構造器

三角形12.0

黃色圓形

18.84955592153876

process finished with exit code 0

從編譯的結果可以看出,在建立子類例項的時候,因為子類對父類實現了繼承,所以在父類中的初始化以及構造也執行了,但是這不是對於父類的例項化操作。

優勢:利用抽象類和抽象方法能更好實現多型的操作。

從上面的例項可以看出,抽象類不能建立例項,只能當作父類來進行繼承,所以抽象類被看作是多個類的通用模板,子類在父類上進行擴充套件,改造。

模板模式在物件導向的軟體中很常用,我們來看看他的規則:

抽象類定義方法,把不能實現的抽象方法留給子類來實現。

父類中的方法中需要呼叫其它的方法,這個方法既可以由子類實現也可以是父類實現。

java之抽象類

1 抽象類概念 抽象類前使用abstract關鍵字修飾,則為抽象類 2 抽象類的應用場景 a 在某些情況下,乙個父類只知道其子類應該包含某些方法,但是不能確切的知道如何實現這些方法 b 從多個具有相同特徵的類中抽象出乙個抽象類,以這個類作為子類的模板,從而避免了子類設計的隨意性 3 作用 限制規定子...

java之抽象類

分析事物時,發現了共性內容,就出現向上抽取。會有這樣一種特殊情況,就是方法功能宣告相同,但方法功能主體不同。那麼這時也可以抽取,但只抽取方法宣告,不抽取方法主體。那麼此方法就是乙個抽象方法。比如我們要宣告乙個人類class,人類包含很多種,美國人和中國人。那麼人類肯定會說話,但是說的是英語還是漢語需...

Java學習 抽象類

當多個類中出現相同功能,但是功能主體不同 這是可以進行向上抽取,這時,只抽取功能定義,而不抽取功能主體 抽象 看不懂 抽象類的特點 1 抽象方法一定在抽象類中。2 抽象方法和抽象類都必須被abstract關鍵字修飾。3 抽象類不可以用new建立物件。以為呼叫抽象方法沒意義。4 抽象類中的方法要被使用...