Интерфейс определяет, а именно, интерфейс для общих объектов. Все объекты, реализующие интерфейс , должны реализовать методы, определенные в интерфейсе. Таким образом, у вас есть класс Car
, который расширяет ваш abstract class Vehicle
и таким образом должен реализовать метод void manufacture()
. Кроме того, хотя классы, продолжающие Vehicle
, будут также получить переменные, определенные в абстрактном классе. Кроме того, расширяющие классы должны вызвать один из конструкторов, определенных в абстрактном классе (если конструкторы не определены, то нет необходимости ничего называть).
Тот факт, что Vehicle
имеет конструктор, который принимает два Workshop
объектов означает, что, когда вы пытаетесь создать экземпляр любого транспортного средства (т.е. Car
), вы должны обеспечить объекты, которые реализуют интерфейс Workshop
.
Недостающая часть вашей головоломки - это конкретный класс, который реализует интерфейс Workshop
. В качестве простейшего примера, если у вас:
public class NoWork implements Workshop{
@Override
public void work(){
// do no work
}
}
Тогда вы могли бы создать экземпляр Car
класс следующим (в качестве примера):
public static void main(String ...args){
final Workshop noWork1 = new NoWork();
final Workshop noWork2 = new NoWork();
final Vehicle car = new Car(noWork1, noWork2);
}
Обратите внимание, что поскольку NoWork
реализует Workshop
это также из типа Workshop
, таким образом, законно объявлять noWork1
(и 2) как Workshop
объектов, хотя они фактически NoWork
объектов. Кроме того, обратите внимание, что поскольку Car
расширяет Vehicle
это найти объявить car
как Vehicle
, даже если это на самом деле Car
(но помните Car
являетсяVehicle
).
Просто чтобы прояснить, хотя, вы не обязательно нужно предоставить два Workshop
классы для каждого проходящего класса Vehicle
, вы могли бы иметь что-то вроде:
public class NoVehicle extends Vehicle{
public NoVehicle(){
super(null, null);
}
@Override
public void manufacture(){
// do nothing...there's nothing to be done
}
}
Но обратите внимание, что любого расширения класса должен вызвать супер-конструктор.
Что вы хотите сказать? – Jared
Почему мы создали конструктор, объявляющий 2 объекта для интерфейса? Я не могу ПОНИМАТЬ ЭТОТ ВЕЩЬ – user2152452
Не могли бы вы также поделиться ссылкой с учебником? – Stifler