Как реализовать интерфейс и расширить поток в абстрактном классе в Java - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь выполнить требования домашней работы ... "Включите хотя бы один интерфейс, который содержит хотя бы один метод, который должен реализовывать реализующий класс."

Когда я пытаюсь создать экземпляр интерфейса, он говоритон не может создать экземпляр интерфейса. Я не уверен, что делаю неправильно.

Я пробовал несколько способов заставить его работать.

//main class
public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {

        Ford mustang = new Ford("Mustang", 135, 125);
        Chevrolet camero = new Chevrolet("Camero", 202, 100);
        Dodge challenger = new Dodge("Challenger", 203, 75);        

        Nitrous nitro = new Nitrous();//problem code

        mustang.start();
        camero.start();
        challenger.start();
    }

}

//Abstract class
public abstract class Vehicle extends Thread implements Nitrous {

    private String model;
    private int speed;
    private int boost;

    public Vehicle(String model, int speed, int boost) {
        this.model = model;
        this.speed = speed;
        this.boost = boost;
    }

    public String getmodel() {
        return model;
    }

    public void setmodel(String model) {
        this.model = model;
    }

    public int getspeed() {
        return speed;
    }

    public void setspeed(int speed) {
        this.speed = speed;
    }

    public int getboost() {
        return boost;
    }

    public void setboost(int boost) {
        this.boost = boost;
    }


    @Override
    public void run() {
        try {
            go();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private void go() throws InterruptedException {
        int trackLength = 5000;
        int checkPointPassed = 0;
        for (int i = 0; i < trackLength; i += (speed + boost)) {
            if (checkPointPassed * 1000 < i) {
                checkPointPassed++;
                System.out.println("The " + this.model + " has passed check point " + checkPointPassed);
//              System.out.println(nos);
                Thread.sleep(10);
            }
        }
    }

}

//subclass one of three
public class Ford extends Vehicle {

    public Ford (String model, int speed, int boost) {

        super(model, speed, boost); 

    }

    @Override
    public void nos() {
        // TODO Auto-generated method stub
        System.out.println("The cars have Nitro!");
    }

}

public class Chevrolet extends Vehicle{

    public Chevrolet(String model, int speed, int boost) {
        // TODO Auto-generated constructor stub.
        super(model, speed, boost);
    }

    @Override
    public void nos() {
        // TODO Auto-generated method stub
        System.out.println("The cars have Nitro!");
    }

}

public class Dodge extends Vehicle{

    public Dodge(String model, int speed, int boost) {
        // TODO Auto-generated constructor stub
        super(model, speed, boost);
    }

    @Override
    public void nos() {
        // TODO Auto-generated method stub
        System.out.println("The cars have Nitro!");
    }

}

//Interface

public interface Nitrous {

    public void nos();
}

Это гонка с тремя транспортными средствами, которые имеют закись азота. Я решил сделать Nitrous интерфейсом. Вы можете увидеть в моем коде, где я пробовал разные способы заставить его работать, и ни один из них не был успешным. Я даже не знаю, близок ли я или далек от того, как это сделать.

1 Ответ

0 голосов
/ 18 октября 2019

Интерфейс только дает представление о том, что конкретный класс может сделать, чтобы реализовать его. Чтобы дать вам конкретный пример, рассмотрим интерфейс Fruit.

public interface Fruit {

  void eat();

}

. Теперь не имеет смысла создавать экземпляр интерфейса, поскольку это только абстракция. Однако было бы разумно создать объект класса Banana или Apple. И поскольку это все фрукты, вы можете их есть.

for (Fruit f : fruits) {
  f.eat();
}

Поскольку ваш класс Vehicle реализует Nitrous, все его подклассы также могут быть назначены этому конкретному типу, и они выполняют егоконтракт, который является nos().

Ford mustang = new Ford("Mustang", 135, 125);

Nitrous asNitrous = mustang; // works
mustang.nos(); // works

Связанный: Каково определение интерфейса в объектно-ориентированном программировании?

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