深入理解java抽象類

2021-09-02 14:50:00 字數 2197 閱讀 6190

在物件導向的概念中,所有的物件都是通過類來描述的,但是並不是所有的類都描述了物件,有些類裡面並沒有包含足夠的資訊來描述物件,這些類被認為是抽象類。

抽象類與普通類的區別就在於抽象類不能被例項化,這就決定了抽象類必須有子類實現它的抽象方法

抽象類只是在普通類的基礎上擴充了一些抽象方法而已,所謂的抽象方法指的是只宣告而未實現的方法(即沒有方法體)。所有抽象方法要求使用abstract關鍵字來定義,並且抽象方法所在的類也一定要使用abstract關鍵字來定義,表示抽象類。

下面我們寫乙個抽象類看看例子:

abstract

class

person

public

void

setname

(string name)

// {}為方法體,所有抽象方法上不包含方法體

public

abstract

void

getpersoninfo()

;//抽象方法

}

可以看到抽象類前面要加abstract修飾,抽象方法也要加abstract關鍵字

需要注意的是:乙個類中如果有抽象方法,那麼這個類一定是抽象類,但是乙個類如果是抽象類,它是可以沒有抽象方法的。

下面我們寫乙個使用抽象類的**:

abstract

class

person

public

void

setname

(string name)

// {}為方法體,所有抽象方法上不包含方法體

public

abstract

void

getpersoninfo()

;//抽象方法

}class

student

extends

person

}public

class

test

}

在抽象類中也允許提供構造方法,並且子類也照樣遵循物件例項化流程。例項化子類時一定先呼叫父類構造方法。例如:

abstract

class

person

public string getname()

public

void

setname

(string name)

// {}為方法體,所有抽象方法上不包含方法體

public

abstract

void

getpersoninfo()

;//抽象方法

}class

student

extends

person

public

void

getpersoninfo()

}public

class

test

}

所以說子類例項化是構造方法會先呼叫父類的構造方法。如果父類沒有無參構造,那麼子類構造必須使用super明確指出使用父類哪個構造方法。

abstract

class

apublic

abstract

void

print()

;}class

bextends

apublic

void

print()

}public

class

test

}

這道題很容易入坑,main方法裡面例項化了乙個b的物件並傳了30進去,那麼在b類中首先會呼叫構造方法,在呼叫b的構造方法時,這時候又因為b繼承於a所以又先呼叫了a的構造方法,a的構造方法裡面又呼叫了a的print方法,但是a裡面print方法時乙個抽象方法,是由子類去實現的,所以這時候又來到了b類中的print方法,注意:此時num還並沒有賦值,所以輸出的應該是num型別的預設值0。

main方法中第二條語句在第一條語句的基礎上又多了乙個.print(),前面的步驟和第一條語句是一樣的流程,只是後面.print()時,是指的b的print方法,而此時num是30,已經將值傳進來了,所以第二條語句輸出的結果應該是:030

深入理解Java的介面和抽象類

一 抽象類 二 介面 三 抽象類和介面的區別 抽象方法 它只有宣告,沒有具體的實現。抽象方法的宣告格式為 abstract void fun 抽象方法必須用 abstract 關鍵字來修飾,如果乙個類含有抽象方法,則稱這個類為抽象類,抽象類必須在類前用abstract關鍵字來修飾。因為抽象類中沒有具...

JAVA中的介面和抽象類深入理解

抽象類往往用來表徵我們在對問題領域進行分析 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象,我們不能把它們例項化 拿不出乙個具體的東西 所以稱之為抽象。比如 我們要描述 水果 它就是乙個抽象,它有質量 體積等一些共性 水果有質量 但又缺乏特性 蘋果 橘子都是水果,它們有自...

從模板方法模式深入理解Java抽象類

二話不說先上 如下所示為乙個抽象類 抽象汽車模型 與它的兩個具體實現類 寶馬模型 賓士模型 的模擬程式 抽象模板類,抽象汽車模型 public abstract class abstractcarmodel 最重要的是,汽車要能行駛!而且行駛流程是固定的,不能改變!protected final v...