1. 程式人生 > >抽象類真的也可以被例項化(Java)

抽象類真的也可以被例項化(Java)

面試過程中,遇到這個問題。當時處於懵的狀態,回答抽象類不能被例項化。當時覺得此事必有蹊蹺,查詢了一些資料瞭解到:

抽象類其實是可以被例項化的,但是它的例項化方式並不是通過普通的new方式來建立物件,而是通過父類的應用來指向子類的例項間接地實現父類的例項化,因為子類在例項化之前,一定會先例項化它的父類。這樣建立了繼承抽象類的子類物件,也就把其父類(抽象類)給例項化了。

注意:介面與抽象類非常類似,但是它不可以被例項化,因為介面壓根沒有建構函式。

下面將通過一個簡單的Demo來展示一下:

首先,定義一個抽象類B,包含抽象方法play()

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();
}
然後,定義一個子類C去繼承類B,並實現其中的抽象方法
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
子類已經被例項化