объекты могут иметь несколько типов
Рассмотрим следующий фрагмент:
public class MyClass extends ParentClass implements Interface1, Interface2 {
//some code
}
Этот класс можно использовать в разных местах следующим образом:
MyClass m1 = new MyClass();
ParentClass p = new MyClass();
Interface1 i1 = new MyClass();
Interface2 i2 = new MyClass();
переменная объявлена как тип интерфейса, ее значение может ссылаться на любой объект, который создается из любого класса, реализующего интерфейс.
Рассмотрим последние две строки вВ предыдущем фрагменте переменная типа Interface1 может ссылаться на любой объект, реализующий этот интерфейс, поэтому, если у нас есть другой класс, реализующий Interface1, скажем, MyClass2, то
Interface1 i1 = new MyClass();
Interface1 i2 = new MyClasss2();
i1 = i2;
i1 = new MyClass2();
Все предыдущие назначения действительны, поскольку MyClass и MyClass2реализует интерфейс 1