java 抽象類為什么不能被實例化?


 

我把CSDN論壇里面的一個帖子內容list到下面,自己看着理解,東家一言,西家一語,雜合起來,基本上也就理解了java中的抽象類為什么不能被實例化了。

因篇幅有限,只能羅列部分留言

以下內容不分先后順序

 

=====================================

抽象類只在分配了在棧中的引用,沒有分配堆中的內存。程序都有一個代碼段,再內存中需要占據一定的內存,而抽象類沒有具體的實現方法,無法具體的給它分配內存空間,所以為了安全,不JAVA不允許抽象類,接口直接實例化

 

=====================================

哲學角度,抽象基類往往在邏輯上無法實體化,比如說讓別人去買水果,不說買什么,就說買水果,顯然是買不到一種叫“水果”的東西的。

 

=====================================

主要是兩點,一個是抽象類是一個不完整的類,一個是內存分配問題。
實際上抽象類更多提供的是一個框架的功能,參數比接口更詳細些。

 

=====================================

本末倒置了
抽不抽象是設計時該考慮的問題,不能問為什么抽象類不能實例化
因為在設計時,考慮到某些類所具備的信息不足以實例化一個對象,才設計成抽象的
所以問題反過來就是答案:
因為這個類不能夠被實例化,所以才設計成抽象的,至於為什么這么做,問你的設計師吧,他也許會給出你答案
不過設計師的脾氣都不太好,給你一棒子叫你照着做就行了也是有可能的

 

=====================================

抽象類,就像是向別人聲明:我能賺大錢
實例化就是具體的行動
因為抽象類只是個聲明,而沒有計划,也不知道怎么賺錢
所以我們是不會投資給錢(內存)他的,就算投資他他也不能做任何事
為了保存大家的利益,沒有具休的賺錢計划不能讓他執行

 

=====================================

不僅JAVA,其他任何語言都一樣~這是由語言的設計決定了的,就是純粹為了繼承而存在

 

=====================================

抽象這個詞已經很好的說明這一點了,我的理解是:對事物進行抽象通常是基於一定的經驗,從眾多的經驗中總結出規律,濃縮的結果可以在以后多次獲利,但是經驗並不能真正幫你工作,你還是需要融入實踐應用!

 

=====================================

 學過匯編你會知道,程序都有一個代碼段,再內存中需要占據一定的內存,而抽象類沒有具體的實現方法,無法具體的給它分配內存空間,所以為了安全,不JAVA不允許抽象類,接口直接實例化

 

=====================================

面向對象思想是對現實社會的模擬(抽象),從哲學上講進化不完全的物種是不能生存的!

 

=====================================

 這是從設計思想層面的東西,為什么要糾結這個問題呢?
說白一點,這就是java的使用規范.

 

=====================================

如果你是一個老板,你問一個應聘的人員:你會什么?他給你一個“我不知道”的答案,你會怎么做!!
這個例子視乎能更現實的說明你的這個問題。面向對象語言是從現實中抽象出來的,它該符合正常的邏輯秩序。

 

=====================================

 Java中是允許不含抽象方法的抽象類的,我認為應該是出於安全的考慮,編譯器強制規定不允許抽象類產生對象!

 

=====================================

java里這么規定的,原因我個人認為是抽象類里有未實現的抽象方法,實例化時不能正常分配內存吧,而且調用這個方法時不是要出異常嗎

 

 

 

參考

https://bbs.csdn.net/topics/330265812


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM