首页 > 解决方案 > 无法访问 Kia 类型的封闭实例。必须使用 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).

标签: javaabstract

解决方案


在 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");
    }
 }
}

请注意,Kia 和 Audi 现在是静态内部类并且具有无参数构造函数。接下来,您应该放入另一个文件,类 Driver 如下所示:

class Driver
{
    Driver(){}

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

最后在第三个文件中,你把你的主类调用其他类,如下所示:

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());
    }
}

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


推荐阅读