抽象類與抽象方法

2022-01-29 04:45:49 字數 1641 閱讀 2064

抽象類:關鍵字(abstract)

為什麼需要抽象類?

1.父類的方法體好多情況下是沒有內容的。

2.子類萬一沒有重寫正確,也沒有提示。

抽象類的定義:abstract class 返回型別 類名;

抽象方法的定義:

普通方法的寫法:public void kaishi(){}

抽象方法的寫法:public void kaishi();   (沒有方法體);

抽象方法與抽象類的關係:

抽象類中可以沒有抽象方法;

抽象方法所在的類必須是抽象類;

注意:抽象類是不能被例項化的(不能直接被new出來)

二:抽象方法的繼承關係:

1.當父類中有繼承方法時(當然,有抽象方法那麼它必須是個抽象類了),它的子類不是抽象類時,那麼它的子類中必須繼承父類中的抽象方法(這樣就防止了你在子類中重寫父類方法時寫錯的情況)例:

圖一:

圖二:

2..當父類中有繼承方法時(當然,有抽象方法那麼它必須是個抽象類了),它的子類也是抽象類時,那麼它的子類中可以不繼承繼承父類中的抽象方法(那麼你寫錯後,會當做例外寫了乙個方法)例:

圖1:

圖2:

當我再寫乙個圖二中的派生類時,並且繼承它裡面的抽象方法時,他會自動繼承jianpan的父類中的抽象方法:如下圖所示

抽象類與介面中的方法訪問修飾符的問題

1、抽象類中的抽象方法(其前有abstract修飾)不能用private、static、synchronized、native訪問修飾符修飾。原因如下:抽象方法沒有方法體,是用來被繼承的,所以不能用private修飾;static修飾的方法可以通過類名來訪問該方法(即該方法的方法體),抽象方法用static修飾沒有意義;使用synchronized關鍵字是為該方法加乙個鎖。。而如果該關鍵字修飾的方法是static方法。則使用的鎖就是class變數的鎖。如果是修飾類方法。則用this變數鎖。但是抽象類不能例項化物件,因為該方法不是在該抽象類中實現的。是在其子類實現的。所以。鎖應該歸其子類所有。所以。抽象方法也就不能用synchronized關鍵字修飾了;native,這個東西本身就和abstract衝突,他們都是方法的宣告,只是乙個吧方法實現移交給子類,另乙個是移交給本地作業系統。如果同時出現,就相當於即把實現移交給子類,又把實現移交給本地作業系統,那到底誰來實現具體方法呢?

2、介面是一種特殊的抽象類,介面中的方法全部是抽象方法(但其前的abstract可以省略),所以抽象類中的抽象方法不能用的訪問修飾符這裡也不能用。而且protected訪問修飾符也不能使用,因為介面可以讓所有的類去實現(非繼承),不只是其子類,但是要用public去修飾。介面可以去繼承乙個已有的介面。

抽象類與抽象方法

有些類注定是不能被初始化的,即不能被new 設想一下,乙個animal類下有很多子類,dog,cat,lion等,這些子類都可以被例項化,但是animal如果被例項化後會變成什麼樣?會有什麼特徵?這是難以想象的,因此像animal這樣的父類就不能例項化,我們迫切需要有一種類,只能例項化其子類物件而本...

抽象類與抽象方法

l 抽象類與抽象方法由abstract修飾 l abstract的使用注意 抽象方法沒有方法體 抽象成員只能存在於抽象類中 抽象類可以有非抽象成員 抽象類的派生類必須實現抽象方法體 抽象類只能用作基類,無法例項化 static void main string args public abstrac...

抽象類與抽象方法

抽象類 含有abstract修飾符的class即為抽象類 抽象類可以宣告物件,但不能例項化物件,必須靠子類將方法實現 含有abstract方法的類必須為抽象類 但是抽象類中的方法可以不是抽象的 抽象方法 抽象方法不能例項化,即沒有方法體 沒有 抽象方法在非抽象子類中需全部重寫 抽象方法只能存在抽象類...