抽象類為什麼不能例項化(new)
答案是 規定。
第一點:回歸問題最初, 我們為什麼要例項化?
我們先逆向思維來考慮,從物件導向的思想來看:
我們需要完成實現乙個功能,而功能中的方法,是由物件來呼叫的,因此我們需要物件,因此我們需要例項化。
那麼回歸本問題,什麼是抽象類?
抽象:就是不具體的意思。類是對物件的具體描述,而抽象類不具體,沒有方法體,(提供的成員不足以生成乙個具體物件),那麼就無法生成乙個不具體的物件。就好比,你可以例項化乙個蘋果,但你不能例項化乙個水果(這個現實中存在的實物)。
2.記憶體考慮:
物件例項化的時候,關鍵字new向jvm申請記憶體,這個類的成員(成員變數,成員方法)會被儲存到記憶體中。而抽象類,沒有具體的成員(成員變數,成員方法),沒辦法準確分配記憶體。
3.現實邏輯:
按照現實邏輯,抽象是從現實實物的抽離,總結,比如定義乙個動物類介面。這個介面是所有動物所共有的特點組成在一起,但是並不能組成現實中真真正正存在的物種。那麼為什麼要有抽象類?
4.設計層面:
為了實現多型,當某些類只希望作為父類使用,不希望被例項化。也就是我們從上層設計角度,就不希望有些類被例項化。當我們進行設計的時候需要盡量依賴父類,越向上層的類越穩定,不容易被修改。
綜上所述:現實邏輯,物件導向,設計,記憶體都不希望我們例項化抽象類,所以 編譯器規定不能例項化。
還需要注意的一點是例項化和有沒有構造方法沒有關係,構造方法只是初始化物件的,new關鍵字向jvm申請記憶體來建立物件的。
抽象類為什麼不能建立物件?
目錄 抽象模擬較區別 建立物件 在物件導向的概念中,所有的物件都是通過類來描繪的,但是反過來,並不是所有的類都是用來描繪物件的,如果乙個類中沒有包含足夠的資訊來描繪乙個具體的物件,這樣的類就是抽象類。抽象類往往用來表徵對問題領域進行分析 設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具...
不能例項化抽象類的淺嚐
今天寫 想實現個功能,寫成乙個介面類,做成了cview的子類,編譯無法通過,說是不能例項化抽象類,由於cview ondraw是抽象的。這個問題我是第一次遇到,於是網上搜了一下都不能得到滿意的答案。找出c 方面的書認真分析了一下,又收穫不少。首先對於虛函式存在的意義有了新的認識。如果沒有虛函式,對於...
不能例項化抽象類的淺嚐
今天寫 想實現個功能,寫成乙個介面類,做成了cview的子類,編譯無法通過,說是不能例項化抽象類,由於cview ondraw是抽象的。這個問題我是第一次遇到,於是網上搜了一下都不能得到滿意的答案。找出c 方面的書認真分析了一下,又收穫不少。首先對於虛函式存在的意義有了新的認識。如果沒有虛函式,對於...