Я новичок в Java. Начал пару недель назад, опираясь на документацию оракула и этот сайт. Постепенно я хорошо понимаю основные концепции ООП.Вызов метода экземпляра интерфейса напрямую
Понятно, что метод экземпляра интерфейса становится методом экземпляра реализующего класса и, следовательно, может быть вызван через объект реализующего класса после его создания.
Интерфейс Set имеет метод iterator(). По моему мнению, нам нужен класс, который сначала реализует интерфейс Set, а затем создает экземпляр объекта этого класса, чтобы иметь возможность вызвать этот метод (через объект).
Просмотрев следующий фрагмент кода, который я читал в Интернете, я заметил, что метод iterator() вызывается через (set), который имеет только тип (Set interface) (т.е. set не является экземпляром любой класс, реализующий интерфейс Set).
Мой вопрос: возможно ли это?
С другой стороны, независимо от того, возможно ли это или нет, согласно документации oracle, метод iterator() классифицируется как «экземпляр» и «абстрактный» метод для интерфейса Set. Итак, как получилось, что это вызвано переменной «set», поскольку только методы по умолчанию и статический интерфейс имеют реализации?
public static void main(String args[]) {
HashMap<Integer, String> hmap = new HashMap<Integer, String>();
hmap.put(12, "Chaitanya");
hmap.put(2, "Rahul");
/* Display content using Iterator*/
Set set = hmap.entrySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()) {
Map.Entry mentry = (Map.Entry)iterator.next();
System.out.print("key is: "+ mentry.getKey() + " & Value is: ");
System.out.println(mentry.getValue());
«set» - это _объект_, который _implements_ [...] «Неверное утверждение - особенно для новичков. Переменная _is not_ - объект. Это просто _отчет одного. Тип переменной имеет два значения: 1) Он ограничивает тип времени выполнения объекта. 2) Он ограничивает методы, которые вы можете вызвать на него. – Seelenvirtuose
Еще одна странная формулировка: «' hmap.entrySet' возвращает _объект_ в переменную 'set' [...]". Он не возвращает _into_ переменную. Вызов 'hmap.entrySet()' возвращает ссылку на объект (который является 'Set'), и эта ссылка _assigned_ для переменной. – Seelenvirtuose
Ссылки слишком рано, когда вы пытаетесь понять разницу между классами и интерфейсами. Вы верны в описании типа переменной, но описание типов с точки зрения ограничений также немного сложно в данный момент, не так ли? –