Ниже interface I
неявно имеет общедоступные методы class Object
в качестве абстрактных членов. Одним из них является toString()
Как здесь называется «toString»?
interface I{
void test(int i);
//implicitly has abstract members matching every public method of 'class Object'
// one of them is toString()
}
Ниже class W
наследует class Object
публичные методы, один из них является toString
,
class W implements I{
public static void main(String[] args){
I w = new W();
w.toString(); //How toString() method is resolved here?
}
}
Как как, супер интерфейс (I
) и супер класс (Object
) из class W
естьtoString()
способ,
Как javac
решить w.toString()
во время компиляции? Я узнал, что здесь используется инструкция invokevirtual
.
Как разрешает jvm w.toString()
во время выполнения?
'interface' не отменяет ничего из' Object' ... – MadProgrammer
Я не вижу проблемы здесь? Интерфейс не является абстрактным классом, если это ваше замешательство, а метод, определенный в интерфейсе, никогда не переопределяет метод в классе. –
@ErwinBolwidt Когда я говорю: 'interface I {public int equals (Object obj); } 'Я получаю ошибку компилятора, возвращаемый тип несовместим с Object.equals (obj)'. Как я понимаю это? Причина в том, что любой интерфейс, который не имеет супер интерфейса, implicilty имеет элементы, соответствующие каждому публичному методу в «Object»? который отличается от переопределения? – overexchange