抽象类真的也可以被实例化(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
子类已经被实例化



  • 16
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 24
    评论
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值