Т.е., например, обычно при создании коллекции мы создаём объект типа имплементируемого интерфейса. List list = new ArrayList(); Но, если бы в ArrayList были поля и методы помимо тех, что есть в интерфейсе List, то они были бы недоступны объекту list. А такой подход используется не только для коллекций, но и повсеместно, вроде. Что-то где-то кто-то писал об этом, не помню... Какая в этом выгода? Почему не лучше ArrayList list = new ArrayList()?