詳述抽象類

2021-09-25 19:25:17 字數 1007 閱讀 8681

在介紹抽象類之前,我們想通過**來引入一下。背景:mammal是whale的父類。

double price = 9;		

mammal mammal = new whale();

mammal.move();

第一行**中實際上有乙個自動型別轉換的過程,因為9屬於整形,要把他變到更大的double型別就要自動型別轉換。

第二三行**,定義了乙個mammal類,但是在記憶體中儲存的位址是new whale(),而jvm虛擬機器在執行時,會根據位址找到new whale(),所以變數mammal呼叫的方法自然來自於子類whale。

在編譯時屬於mammal,在執行時尋找記憶體中位址屬於new whale(),這就是我們提到過的多型。

所以在這種多型的情況下,父類中的那些被子類重寫過方法常常不會被用到,所以我們之前提到過,這種的方法沒有必要存在方法體。

於是我們就引入了抽象方法

抽象方法:沒有方法體的方法,要被abstract修飾。

而當乙個類中存在了乙個抽象方法時,那麼這個類也一定為抽象類,也要用到abstract來修飾。

幾點注意事項:

1.抽象類有構造方法,但是不能建立物件,mammal mammal = new mammal();   ×

2.如果乙個子類沒有重寫完抽象類父類中的所有抽象方法,則這個子類也必須為抽象類。

3.抽象類中可以沒有抽象方法,但是有抽象方法的類一定是抽象類。

4.乙個抽象類中全是抽象方法,那麼這個類可以被定義成介面。

5.抽象類與普通類

思考

因為如果一子類沒有重寫抽象類的所有方法,則剩下的方法會被繼承,而剩下的方法仍然為抽象方法所以這個類為抽象類,所以一定有乙個子類完全實現了抽象類中的抽象方法!

詳述抽象類

public class mammal public class whale extends mammal public class test 如上,test類中展示了多型,當呼叫move方法時,指向的是子類whale中的方法。因此,父類中的move方法的方法體便失去了其意義,可以將其化為抽象方法。...

詳述抽象抽象類與介面的區別

抽象類 抽象類 用abstract修飾的類是抽象類 抽象方法 用abstract修飾的方法是抽象方法,方法只有宣告沒有方法體 特點 注意 abstract不能與final private static一起使用 介面介面 是抽象方法的集合,用inte ce修飾 特點 抽象類與介面的區別 區別抽象類 介...

詳述抽象類與介面的區別

抽象類 只要乙個類中有抽象類,則這個類就被稱為抽象類,抽象類中可以沒有抽象方法 介面 乙個類中全部為抽象方法,則這個類就被稱為介面 具體的區別如下 抽象類介面 關鍵字abstract inte ce 成員變數 可包含任意合法成員變數 包括各種訪問級別的類成員變數和例項成員變數 只能包含公開靜態常量 ...