在Java中抽象類真的不能實(shí)例化么?
在學(xué)習(xí)的過程中,發(fā)現(xiàn)了一個(gè)問題,抽象類在沒有實(shí)現(xiàn)所有的抽象方法前是不可以通過new來構(gòu)建該對(duì)象的蝗敢,但是抽象方法卻是可以有自己的構(gòu)造方法的。這樣就把我搞糊涂了足删,既然有構(gòu)造方法寿谴,又不可以通過new來創(chuàng)建,那么抽象類在沒變成具體類的時(shí)候究竟可不可以實(shí)例化呢失受?
通過上網(wǎng)查找資料讶泰、引用:blog.sina.com.cn/s/blog_7ffb8dd5010120oe.html
抽象類其實(shí)是可以實(shí)例化的,但是他的實(shí)例化方式不是通過new方式來創(chuàng)建對(duì)象贱纠,而是通過父類的引用來指向子類的實(shí)例來間接地實(shí)現(xiàn)父類的實(shí)例化(因?yàn)樽宇愐獙?shí)例化前峻厚,一定會(huì)先實(shí)例化他的父類。這樣創(chuàng)建了繼承抽象類的子類的對(duì)象谆焊,也就把其父類(抽象類)給實(shí)例化了).但是:接口是不能被實(shí)例化的(接口壓根就沒有構(gòu)造函數(shù))惠桃。
abstract class B {
private String str;
public B(String a) {
System.out.println("父類已經(jīng)實(shí)例化");
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)實(shí)例化");
}
@Override
public void play() {
System.out.println("我實(shí)現(xiàn)了父類的方法");
}
public static void main(String[] args) {
B aa=new A("a");
}
}
結(jié)果如下:
結(jié)果如下:
父類已經(jīng)實(shí)例化
a
子類已經(jīng)實(shí)例化