Проходя мой онлайн-учебник, я наткнулся на этот урок. У меня есть интерфейс и два класса, которые реализуют этот интерфейс.
public interface Payable {
double getPaymentAmount();
}
и
- класс
Invoice
, который реализует вышеуказанный интерфейсPayable
- класс
SalariedEmployee
, который расширяет абстрактный классEmployee
, реализующий интерфейсPayable
. - Тестовый класс, содержащий основной метод для проверки этого.
Теперь в тестовом классе при создании массива объектов тип объекта назывался Payable[]
, а не SalariedEmployee[]
или Invoice[]
, например
public static void main(String[] args) {
Payable[] payableObjects = new Payable[4];
payableObjects[0] = new Invoice("0000", "abc", 1,2);
payableObjects[1] = new SalariedEmployee("test", "user", "000-000", 35);
- Это потому, что все классы реализуют интерфейс Payable[]?
- Если интерфейс определен на верхнем уровне иерархии, всегда ли возможно создать объекты всех классов, реализующих этот интерфейс?
List
илиMap
, где вы всегда должны объявлять переменную какList
илиMap
, чтобы иметь возможность изменить присвоенный тип класса. Ваш общий вариант использования здесь заключается в том, что вы хотите вызывать только методы, предоставляемые этим конкретным интерфейсом. - person SomeJavaGuy   schedule 19.11.2015