为什么我们不能实例化抽象类

时间:2014-08-21 20:33:39

标签: abstract-class

众所周知,我们无法实例化一个抽象类。但请查看此代码:

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类的对象。 我们再次知道,当创建子类对象时,首先调用超类构造函数。现在调用超类构造函数然后我们知道第一个对象是在内存中创建的,然后在被调用中构造。那么为什么没有创建这里的对象。

3 个答案:

答案 0 :(得分:2)

您可以创建抽象类的实例,但只能通过实例化子类。例如,您不能通过说:

来创建抽象Bike
Bike b = new Bike(); //error

因为run()方法没有可执行代码。

b.run(); // uh oh.

但是,由于所有非抽象子类都必须实现该方法,因此我们知道b.run()是安全的,因为b必须是Bike的非抽象子类。

答案 1 :(得分:1)

我不确定我是否明白你的意思,但这里是: 抽象类仅用作具体类的模型,这就是它无法实例化的原因。创建的对象是Honda类型,它扩展了抽象类Bike。

答案 2 :(得分:0)

抽象类与接口类似。您无法实例化它们,并且它们可能包含使用或不使用实现声明的混合方法。

会推荐一些阅读:

Abstract Classes

How can abstract classes have references but not objects?

干杯!!