众所周知,我们无法实例化一个抽象类。但请查看此代码:
abstract class Bike
{
int limit=30;
Bike()
{
System.out.println("constructor is invoked");
}
void getDetails()
{
System.out.println("it has two wheels");
}
abstract void run();
}
class Honda extends Bike{
void run()
{
System.out.println("running safely..");
}
public static void main(String args[])
{
Bike obj = new Honda();
obj.run();
obj.getDetails();
System.out.println(obj.limit);
}
}
这里我们通过使用Superclass(Abstract class)的引用来创建Honda类的对象。 我们再次知道,当创建子类对象时,首先调用超类构造函数。现在调用超类构造函数然后我们知道第一个对象是在内存中创建的,然后在被调用中构造。那么为什么没有创建这里的对象。
答案 0 :(得分:2)
您可以创建抽象类的实例,但只能通过实例化子类。例如,您不能通过说:
来创建抽象Bike
类
Bike b = new Bike(); //error
因为run()
方法没有可执行代码。
b.run(); // uh oh.
但是,由于所有非抽象子类都必须实现该方法,因此我们知道b.run()
是安全的,因为b
必须是Bike
的非抽象子类。
答案 1 :(得分:1)
我不确定我是否明白你的意思,但这里是: 抽象类仅用作具体类的模型,这就是它无法实例化的原因。创建的对象是Honda类型,它扩展了抽象类Bike。
答案 2 :(得分:0)
抽象类与接口类似。您无法实例化它们,并且它们可能包含使用或不使用实现声明的混合方法。
会推荐一些阅读:
How can abstract classes have references but not objects?
干杯!!