① 一個抽象類中只有抽象屬性,沒有抽象方法可以嗎
抽象類可以沒有抽象方法,但是如果你的一個類已經聲明成了抽象類,即使這個類中沒有抽象方法,它也不能再實例化,即不能直接構造一個該類的對象。
如果一個類中有了一個抽象方法,那麼這個類必須聲明為抽象類,否則編譯通不過。
② 抽象類注意事項有哪些
1. 抽象類不能創建對象,如果創建,編譯無法通過而報錯。只能創建其非抽象子類的對象。
理解:假設創建了抽象類的對象,調用抽象的方法,而抽象方法沒有具體的方法體,沒有意義。
2. 抽象類中,可以有構造器,是供子類創建對象時,初始化父類成員使用的。
理解:子類的構造方法中,有默認的super(),需要訪問父類構造方法。
3. 抽象類中,不一定包含抽象方法,但是有抽象方法的類必定是抽象類。
理解:未包含抽象方法的抽象類,目的就是不想讓調用者創建該類對象,通常用於某些特殊的類結構設計。
4. 抽象類的子類,必須重寫抽象父類中所有的抽象方法,否則子類也必須定義成抽象類,編譯無法通過而報錯。
理解:假設不重寫所有抽象方法,則類中可能包含抽象方法。那麼創建對象後,調用抽象的方法,沒有意義。
5. 抽象類存在的意義是為了被子類繼承,抽象類體現的是模板思想。
理解:抽象類中已經實現的是模板中確定的成員,抽象類不確定如何實現的定義成抽象方法,交給具體的子類去實現。我之前在黑馬程序員學java,現在已經工作了,感覺老師講的很好的。
③ 什麼是抽象類
抽象類就是抽象類唄,裡面有抽象的方法,可以被繼承,繼承類要實現抽象類的抽象方法,你可以也把它看作特殊的介面。當然抽象類也是實現多態好東西,一般項目里的基類都是抽象類,等你寫項目以後就能慢慢明白抽象類的好處了,學習的時候知道有這個東西能寫出來就行。
④ 什麼是抽象類和抽象方法
抽象類就是不能使用new方法進行實例化的類,即沒有具體實例對象的類。抽象類有點類似「模板」的作用,目的是根據其格式來創建和修改新的類。對象不能由抽象類直接創建,只可以通過抽象類派生出新的子類,再由其子類來創建對象。當一個類被聲明為抽象類時,要在這個類前面加上修飾符abstract。
在抽象類中的成員方法可以包括一般方法和抽象方法。抽象方法就是以abstract修飾的方法,這種方法只聲明返回的數據類型、方法名稱和所需的參數,沒有方法體,也就是說抽象方法只需要聲明而不需要實現。當一個方法為抽象方法時,意味著這個方法必須被子類的方法所重寫,否則其子類的該方法仍然是abstract的,而這個子類也必須是抽象的,即聲明為abstract。
抽象類中不一定包含抽象方法,但是包含抽象方法的類一定要被聲明為抽象類。抽象類本身不具備實際的功能,只能用於派生其子類。抽象類中可以包含構造方法,但是構造方法不能被聲明為抽象。
抽象類不能用final來修飾,即一個類不能既是最終類又是抽象類。
abstract不能與private、static、final、native並列修飾同一個方法。
程序舉例:abstract
class
Animal
//定義抽象類
abstract
void
eat();
//定義抽象方法}class
Horse
extends
Animal
//定義繼承Animal的子類
void
eat()
//重寫父類的抽象方法
}class
Dog
extends
Animal
void
eat()
}class
test}運行結果:
馬吃草料!
狗吃骨頭!
如果幫助到您,請記得採納為滿意答案哈,謝謝!祝您生活愉快!
vae.la
⑤ C++關於抽象類的問題 編譯的時候總是顯示錯誤,又不懂改,,,求救
virtual float area()=0;的意思就是說,繼承類必須將float area() 進行覆蓋,否則無法創建對象
你的代碼來看,就是把get_area和get_vol的get_去掉,或者在base里,將這個前綴加上
⑥ 抽象類的特點是什麼
1、抽象類不能實例化。
2、抽象類可以包含抽象方法和抽象訪問器。
3、不能用 sealed 修飾符修飾抽象類,因為這兩個修飾符的含義是相反的。 採用 sealed 修飾符的類無法繼承,而 abstract 修飾符要求對類進行繼承。
4、從抽象類派生的非抽象類必須包括繼承的所有抽象方法和抽象訪問器的實際實現。
(6)抽象類能否編譯擴展閱讀
抽象類與其他類的比較
一、與具體類比較
1、抽象類不能直接實例化,並且對抽象類使用 new 運算符會導致編譯時錯誤。雖然一些變數和值在編譯時的類型可以是抽象的,但是這樣的變數和值必須或者為 null,或者含有對非抽象類的實例的引用(此非抽象類是從抽象類派生的)。
2、允許(但不要求)抽象類包含抽象成員。
3、抽象類不能被密封。
二、與介面比較
抽象類表示該類中可能已經有一些方法的具體定義,但是介面就僅僅只能定義各個方法的界面(方法名,參數列表,返回類型),並不關心具體細節。
參考資料來源:網路-抽象類
⑦ java抽象類編譯後能不能生成*.class,若生成,文件名叫什麼
每個class編譯後都會生成一個class文件。抽象類如果是頂層類那麼文件名就是類名.class,如果是內部類那麼文件名就是外部類名$類名.class。
⑧ 在java當中new一個抽象方法可以編譯通過嗎
抽象類如果new了就不叫抽象類了。
理解抽象類
abstract class和interface在Java語言中都是用來進行抽象類(本文 中的抽象類並非從abstract class翻譯而來,它表示的是一個抽象體,而abstract class為Java語言中用於定義抽象類的一種方法, 請讀者注意區分)定義的,那麼什麼是抽象類,使用抽象類能為我們帶來什麼好處呢?
在 面向對象的概念中,我們知道所有的對象都是通過類來描繪的,但是反過來卻不是這樣。並不是 所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。抽象類往往用來表徵我們在對問題領域進行分析、 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象。比如:如果我們進行一個圖形編輯軟體的開發,就會發現問題領域存在著圓、 三角形這樣一些具體概念,它們是不同的,但是它們又都屬於形狀這樣一個概念,形狀這個概念在問題領域是不存在的,它就是一個抽象概念。正是因為抽象的概念 在問題領域沒有對應的具體概念,所以用以表徵抽象概念的抽象類是不能夠實例化的。
在面向對象領域,抽象類主要用來進行類型隱藏。 我們可以構造出一個固定的一組行為的抽象描 述,但是這組行為卻能夠有任意個可能的具體實現方式。這個抽象描述就是抽象類,而這一組任意個可能的具體實現則表現為所有可能的派生類。模塊可以操作一個 抽象體。由於模塊依賴於一個固定的抽象體,因此它可以是不允許修改的;同時,通過從這個抽象體派生,也可擴展此模塊的行為功能。熟悉OCP的讀者一定知 道,為了能夠實現面向對象設計的一個最核心的原則OCP(Open-Closed Principle),抽象類是其中的關鍵所在。
⑨ C#中關於抽象類的問題。
投象類是不可以實例化的。這里所謂類實例化指的就是類在生成過程中調用了類的構造函數,則稱該類為實例化。而抽象類沒有構造函數,所以是無法實例化的。
在C#編譯器環境下,具體類即使不寫構造函數,編譯系統也會自動增加默認的實例函數,以便實例化,但是對於聲明為abstract的類,術語稱「抽象類」或「泛類」 ,系統不會默認為其生成構造函數,而且編譯系統在編譯時,遇過聲明為abstract類時,如有構造函數則會拋出錯誤!
Animal[] animalarray;
Aninal[] animalarray = new Animal[2];
這種情況下均沒有調用Animal的構造函數,因而不是對抽象類的實例化,而是對數組的實例化。
Animal animal;
這句也只是聲明了一個變數,也不沒有對抽象類進行實例化,因而也是正確的。
Animal animal = new Animal();
這是試圖對一個抽象類實例化,因Animal抽象類沒有構造函數,會造成實例化的失敗!所以這是不允許的!
Animal animal = new Cat();
Cat是一個Animal的子類(派生類),因有相應的構造函數的話,是允許的。允許父類(基類)指示子類(派生類)這種調用規則其實就是我們常說的里氏原則。它並沒有對抽象類進行任何的實例化的。