1. 程式人生 > >不能例項化的物件

不能例項化的物件

  面嚮物件語言中,一切皆物件,哪些物件不能被例項化呢?3種:介面、抽象類、單例。這3種物件,一旦你想new一個例項出來,直接編譯報錯。

  其中介面是最直接的,它連建構函式都沒有,很明顯我們沒法去例項化一個連建構函式都沒有的物件。單例的建構函式是私有的,那麼你也沒法在除了單例之外的地方去例項化它,但它一般會提供一個方法給你,在這個方法裡它會呼叫自己的私有建構函式進行例項化。

  比較糾結的是抽象類,因為它是有公共建構函式的,子類預設呼叫抽象類的建構函式(通過super關鍵字),但抽象類沒法例項化自己。這裡先區分父類這個概念,它分抽象的和普通的,普通的是可以例項化的,比如java物件的太祖Object。但抽象類就不同了,它只能依存子類來體現自己,我們假設抽象類可以被例項化,那new出來後究竟是個什麼東西呢?它本身是子類的公共特性的代表,那現在究竟代表哪個了子類?混亂了。結合多型的特性,最多隻能這樣了:

父類 父類例項 = new 子類();

  但實際上這個父類例項指向的是子類的例項,在執行時由JVM動態綁定了子類的例項。