Ни один экземпляр типа Kia не доступен. Должен квалифицировать распределение с включающим экземпляром типа Kia - PullRequest
0 голосов
/ 16 мая 2019
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).

1 Ответ

0 голосов
/ 16 мая 2019

В файле 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());
    }
}

Важно разделить ваши классы на разные файлы, а не хранить все в одном гигантском файле.Это сбивает с толку читать, исправлять и действительно делать что-либо.Вам также нужно убедиться, что вы создаете конструкторы для классов, которые будут создавать экземпляры AKA, вы будете использовать new для них.Также убедитесь, что все эти файлы находятся в одном пакете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...