日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java中抽象類也能實例化

 Levy_X 2017-07-16

在Java中抽象類真的不能實例化么?

  在學習的過程中,發(fā)現(xiàn)了一個問題,抽象類在沒有實現(xiàn)所有的抽象方法前是不可以通過new來構建該對象的,但是抽象方法卻是可以有自己的構造方法的。這樣就把我搞糊涂了,既然有構造方法,又不可以通過new來創(chuàng)建,那么抽象類在沒變成具體類的時候究竟可不可以實例化呢?

  通過上網(wǎng)查找資料、引用:blog.sina.com.cn/s/blog_7ffb8dd5010120oe.html 

  抽象類其實是可以實例化的,但是他的實例化方式不是通過new方式來創(chuàng)建對象,而是通過父類的引用來指向子類的實例來間接地實現(xiàn)父類的實例化(因為子類要實例化前,一定會先實例化他的父類。這樣創(chuàng)建了繼承抽象類的子類的對象,也就把其父類(抽象類)給實例化了).但是:接口是不能被實例化的(接口壓根就沒有構造函數(shù))。

  代碼如下:

復制代碼
abstract class B { private String str; public B(String a) { System.out.println('父類已經(jīng)實例化'); this.str=a; System.out.println(str); } public abstract void play(); } public class A extends B{ public A(String a) { super(a); System.out.println('子類已經(jīng)實例化'); } @Override public void play() { System.out.println('我實現(xiàn)了父類的方法'); } public static void main(String[] args) { B aa=new A('a'); } }
復制代碼

結(jié)果如下:

父類已經(jīng)實例化
a
子類已經(jīng)實例化

 

另外:
Calendar中的getInstance()

Calendar Cal =  Calendar.getInstance();  
Calendar是抽象類不能直接通過new對象,但是提供的靜態(tài)getInstance()就是給Calendar創(chuàng)建對象。
從Calendar.getInstance() 中所獲得的實例其實就是一個 'GreogrianCalendar' 對象

GreogrianCalendar就是Calendar的子類,他實現(xiàn)了Calendar里面的抽象方法。過父類的引用來指向子類的實例來間接地實現(xiàn)父類的實例化。同時,使用getInstance()有諸多好處:
1。 new 一定要生成一個新對象,分配內(nèi)存;getInstance()則不一定要再次創(chuàng)建,它可以把一個已存在的引用給你使用,這在效能上優(yōu)于new;

2。new創(chuàng)建后只能當次使用,而getInstance()可以跨棧區(qū)域使用,或者遠程跨區(qū)域使用。所以getInstance()通常是創(chuàng)建static靜態(tài)實例方法的。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多