java.util.Set
- это интерфейс, а не класс. Так
Set set = new HashSet();
создает объект, который является экземпляром HashSet
, и присваивает ссылку на этот объект переменной, тип которой Set
. Это работает, потому что HashSet
class реализует Set
интерфейс. С другой стороны:
Set set = new Set();
выдает ошибку компиляции, поскольку вы не можете создать экземпляр интерфейса.
Интерфейс Java по сути является контрактом между реализацией (классом) и вещами, которые его используют. В нем говорится, что такое имена и подписи методов соответствующего объекта, но ничего не говорится о состоянии объекта или о том, как работают его методы.
(Просто немного запутать ... Java также позволяет писать что-то вроде этого:
Set set = new Set() {
// attributes and methods go here
};
Это не создает «экземпляр» Set
интерфейса per se ..., потому что это не имеет смысла. Скорее, он объявляет и создает анонимный класс , который реализует Set
интерфейс.)