实例化抽象类的子类

时间:2013-12-30 08:06:25

标签: java class instantiation abstract

如何实例化抽象类的子类?它给出了错误 - 不能访问类型为abstractclass的封闭实例。无论我如何交换价值观。我知道我不能使用motorvehicle cuz抽象类不能实例化....

public class abstractclass {
public static void main(String args[]){

    Car car1 = new Car();   

}
abstract class MotorVehicle
{

    int fuel;


    int getFuel()
    {
         return this.fuel;
    }


    abstract void run();


}

class Car extends MotorVehicle
{
    void run()
    {

        System.out.print("Wrroooooooom");
    }


}
}

3 个答案:

答案 0 :(得分:2)

它不会让你实例化它们,因为你已经将它们声明为内部类。使用static在类声明之前,您将能够执行此操作:

class Outer {

    class Inner {

    }

    static class Nested {

    }
}

如果嵌套类是 inner (非静态),则它属于外部类的实例,而不属于外部类本身。内部类需要实例化外部类的实例。静态嵌套类不会。

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
Outer.Nested nested = new Outer.Nested();

请参阅Nested Classes教程。这就是"没有封闭的实例"消息是关于。你是对的,抽象类不能直接实例化,但Car不是抽象的。

答案 1 :(得分:1)

Hi Here Car类是abstractclass的内部类。因此,只有在声明为静态

的情况下才能实例化内部类

让我们改变您的计划:

public class Abstract {
public static void main(String args[]){

    Car car1 = new Car();   

}
abstract class MotorVehicle
{

    int fuel;


    int getFuel()
    {
         return this.fuel;
    }


    abstract void run();


}

static class Car
{
    void run()
    {

        System.out.print("Wrroooooooom");
    }


}
}

这里Car class我声明为static,它可以在“abstractclass”中实例化。

如需进一步参考,您可以查看Getting a "No enclosing instance of type..." error

答案 2 :(得分:0)

删除此: public class abstractclass {

并且从文件末尾开始结束}。

您已将整个程序包装到一个抽象类中。那是错的:)。