簡體   English   中英

實例化抽象類的子類

[英]Instantiate subclass of abstract class

如何實例化抽象類的子類? 它給出了錯誤-無法訪問類型為abstractclass的封閉實例。 無論我如何交換價值觀。 我知道我不能使用汽車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");
    }


}
}

它不允許您實例化它們,因為您已將它們聲明為內部類。 在類聲明的前面加上static ,就可以做到這一點:

class Outer {

    class Inner {

    }

    static class Nested {

    }
}

如果嵌套類是內部類(非靜態),則它屬於外部類的實例,而不是外部類本身。 內部類需要實例化外部類的實例。 靜態嵌套類沒有。

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

請參閱嵌套類教程。 這就是“無封閉實例”消息的含義。 沒錯,不能直接實例化抽象類,但是Car不是抽象的。

嗨,這里Car類是abstractclass的內部類。 因此,只有在將內部類聲明為static時,您才能這樣實例化內部類

讓我們更改您的程序:

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類聲明為static,並且可以在“ abstractclass”中實例化它。

有關更多參考,請查看獲取“沒有類型的封閉實例...”錯誤

刪除以下內容:public class abstractclass {

並從文件末尾開始}。

您已經將整個程序包裝到一個抽象類中。 那就是錯誤的:)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM