Разные классы, реализующие один и тот же интерфейс, переходят в конструктор

#oop #inheritance #interface #abstraction

#ооп #наследование #интерфейс #абстракция

Вопрос:

Это вопрос об абстракции.

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

Мой вопрос в том, как будет выглядеть конструктор? Какой тип объекта входит в подпись?

Они не расширяют общего родителя, поэтому я не могу использовать полиморфизм.

объект контроллера хочет быть введен с объектом, который реализует отображаемый интерфейс.

 interface Displayable {
    void display();
}

class Display1 implements Displayable {
    public void display() {
        //Shows something Fancy on the screen
    }
}

class Display2 implements Displayable {
    public void display() {
        //write something to console
    }
}

class Main {
    public static void main(String[] args) {
//        Controller controller = new Controller(new Display1());
        Controller controller = new Controller(new Display2());
        controller.display();
    }
}

class Controller {
    ????? display;

    public Controller(?????? display) {
        this.display = display;
    }

    public void display() {
        display.display();
    }
}
  

Комментарии:

1. Похоже, вы ответили на свой собственный вопрос: «объект контроллера хочет быть введен с объектом, который реализует отображаемый интерфейс». И т.д. public Controller(Displayable display) { ... }