物件導向之霧裡看花 抽象類

2021-10-10 11:25:04 字數 1847 閱讀 8991

​ 如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。簡單來說就是類中的資訊太少了描述不了乙個具體的」東西「,這就是抽象類。

​ 抽象類不能例項化,但類的其它功能依舊存在,成員變數、成員方法和構造方法的訪問方式和普通類一樣。

​ 1.用abstract修飾的類就是抽象類。

​ 2.若某個類中包含有抽象方法,那麼該類就必須定義成抽象類。

​ 3.抽象方法

抽象方法是一種特殊的方法:它只有宣告,沒有具體的實現;

抽象方法必須使用abstract關鍵字進行修飾。

​ 4.抽象類可以有成員屬性和非抽象的成員方法。

​ 5.抽象類不能有被例項化,但可以有建構函式,因為抽象類中含有無具體實現的方法,所以不能用抽象類建立物件。

​ 6.抽象類只能用作基類,表示一種繼承關係。繼承抽象類的非抽象類必須實現其中的所有非抽象方法,對於已經實現的的方法的引數、返回值必須要和抽象類中的方法一致。否則,該類也必須宣告為抽象類

​ 7.構造方法和靜態方法不可以修飾為abstract。

使用關鍵字abstract定義抽象類,一般語法為:

/*

[訪問許可權] abstract class 類名

*/public

abstract

class

shapes

public

abstract

class

shapes

}

**示例-----抽象類

/*

* 乙個類中有方法是抽象方法,這個類也會變成乙個抽象類

* 乙個抽象類會有 0-n 個抽象方法

*/public

abstract

class

person

/* * 在乙個類中,會有一類方法,子類對這種方法永遠都不滿意,會對這種方法進行重寫;

* 把乙個方法的方法體去掉,然後被abstract修飾,那麼這個方法就變成了乙個抽象方法;*/

public

abstract

void

say();

public

abstract

void

love()

;}

**示例—繼承抽象類的子類

/*

* 抽象類被其它類繼承

* 抽象類被繼承後必須對其中的抽象方法進行重寫,否則就需要被abstract修飾為抽象類

* 但是一般子類不會加abstract修飾

* 乙個類繼承乙個抽象類,那麼這個類會變成乙個抽象類**/

public

class

chinese

extends

person

@override

public

void

love()

}

**示例----測試

public

class

test

}

需要注意的幾個問題:

1.抽象類不能建立,那麼抽象類中是否有構造器?

答:抽象類中有構造器。構造器的作用:給子類初始化物件時需要先用super呼叫父類的構造器。

2.抽象類是否能夠被final修飾?

答:不能被final修飾,因為抽象類設計的初衷就是給子類繼承重寫用的,如果被final修飾了,就不能被子類繼承了,那抹抽象類的意義就沒有了。

物件導向之抽象類

abstract 關鍵字,用於修飾方法和類 抽象方法 不同類的方法是相似,但是具體內容又不太一樣,所以我們只能抽取他的宣告,沒有具體的方法體,沒有具體方法體的方法就是抽象方法 抽象類 有抽象方法的類必須是抽象類 如果乙個類中有抽象方法,那麼這個類必須是抽象類 抽象類和抽象方法必須被abstract修...

物件導向之抽象類

為了引出抽象類我們先來這樣乙個例子 package cn.edu.xatuii public class person public void setname string name public void eat food f public string getname class chicken...

物件導向 抽象類

抽象 裡邊有未明確的東西。抽象類的特點 1 抽象方法一定在抽象類中。2 抽象方法和抽象類都必須被abstract關鍵字修飾。3 抽象類不可以用new建立物件,因為呼叫抽象方法沒意義。4 抽象類中的抽象方法要被使用,必須由子類複寫其所有的抽象方法後,建立子類物件呼叫。如果子類只覆蓋部分抽象方法,那麼該...