抽象類真的也可以被例項化(Java)
阿新 • • 發佈:2018-12-31
面試過程中,遇到這個問題。當時處於懵的狀態,回答抽象類不能被例項化。當時覺得此事必有蹊蹺,查詢了一些資料瞭解到:
抽象類其實是可以被例項化的,但是它的例項化方式並不是通過普通的new方式來建立物件,而是通過父類的應用來指向子類的例項間接地實現父類的例項化,因為子類在例項化之前,一定會先例項化它的父類。這樣建立了繼承抽象類的子類物件,也就把其父類(抽象類)給例項化了。
注意:介面與抽象類非常類似,但是它不可以被例項化,因為介面壓根沒有建構函式。
下面將通過一個簡單的Demo來展示一下:
首先,定義一個抽象類B,包含抽象方法play()
然後,定義一個子類C去繼承類B,並實現其中的抽象方法public abstract class B { private String str; public B(String a){ System.out.println("父類已經例項化"); this.str = a; System.out.println(str); } public abstract void play(); }
public class C extends B{
public C(String c){
super(c);
System.out.println("子類已經被例項化");
}
@Override
public void play() {
System.out.println("我實現了父類的方法");
}
public static void main(String[] args){
B c = new C("c");
}
}
執行結果如下:
父類已經例項化
c
子類已經被例項化