无法访问 Kia 类型的封闭实例。必须使用 Kia 类型的封闭实例来限定分配

No enclosing instance of type Kia is accessible. Must qualify the allocation with an enclosing instance of type Kia

package com.abstration.abstractclass;

    abstract class CarTest 
    {
    abstract void start();
    abstract void accelerate();
    abstract void brakes();
    }
    class Kia extends CarTest
    {
    void start()
    {
        System.out.println("Kia started");
    }   
    void accelerate()
    {
        System.out.println("Kia accelerate");
    }
    void brakes()
    {
        System.out.println("kia stops");
    }
    class Audi extends CarTest
    {
        void start()
        {
            System.out.println("Audi started");
        }   
        void accelerate()
        {
            System.out.println("Audi accelerate");
        }
        void brakes()
        {
            System.out.println("Audi stops");
        }
    }


    public static class Driver
    {
        void driver(CarTest c)
        {
            c.start();
            c.accelerate();
            c.brakes();
        }
    }

      public static void main(String args[])
    {
        Driver d = new Driver();
        d.driver(new Kia());
        d.driver(new Audi());
    }


}

我面临的错误:-

1)No enclosing instance of type Kia is accessible. Must qualify the allocation with an enclosing instance of type Kia (e.g. x.new A() where x is an instance of Kia).

在 CarTest 文件中你应该有:

abstract class CarTest 
{
abstract void start();
abstract void accelerate();
abstract void brakes();

static class Kia extends CarTest
{
    Kia() {
    }

    void start()
    {
        System.out.println("Kia started");
    }   
    void accelerate()
    {
        System.out.println("Kia accelerate");
    }
    void brakes()
    {
        System.out.println("kia stops");
    }
}

static class Audi extends CarTest
{
    Audi() {
    }

    void start()
    {
        System.out.println("Audi started");
    }   
    void accelerate()
    {
        System.out.println("Audi accelerate");
    }
    void brakes()
    {
        System.out.println("Audi stops");
    }
 }
}

请注意,起亚和奥迪现在是静态内部 classes 并且具有 no-arg 构造函数。接下来您应该放入另一个文件,class 驱动程序,如下所示:

class Driver
{
    Driver(){}

    void driver(CarTest c)
    {
        c.start();
        c.accelerate();
        c.brakes();
    }
}

最后在 A THIRD 文件中,您将主 class 放入将像这样调用其他 class 的主 class:

import (thePackage).CarTest.Audi;
import (thePackage).CarTest.Kia;

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

        Driver d = new Driver();
        d.driver(new Kia());
        d.driver(new Audi());
    }
}

重要的是将您的 classes 分成不同的文件,而不是将所有内容都放在一个巨大的文件中。它使阅读、修复和真正做任何事情都变得混乱。您还需要确保为 classes 创建构造函数,这些构造函数将实例化 AKA 您将在它们上使用 new。还要确保所有这些文件都在同一个包中。