2015-04-16 3 views
1

Если подкласс реализует метод экземпляра, который имеет одну и ту же подпись со своим суперклассом, он называется переопределением.В чем разница между переопределением и скрытием статического метода суперкласса

Сравнительно, если «переопределить» статический метод его суперкласса, он называется скрытием.

В чем разница между этими двумя концепциями в памяти во время вызова функции?

+0

Что значит «в памяти»? – Maroun

+3

Ничего не скрывается при создании статического метода с тем же именем. Статические методы всегда вызывают класс; нет наследования или сокрытия. –

+0

@MarounMaroun, например, какая разница, когда обе эти концепции отображаются в байт-код (.class) –

ответ

1

Адреса статических методов определяются по адресу Время компиляции. Таким образом, нет необходимости искать дальше для адреса метода, это было решено раньше.

Переопределенные адреса метода определены по адресу Время работы. Это зависит от экземпляра, и поиск метода выполняется с базового метода на переопределенный метод.

1

Переопределение - это явление времени выполнения, которое зависит от объекта, и объекты создаются во время выполнения, поэтому вызов функции будет определяться на основе объекта во время выполнения.

В то время как статический метод вызов осуществляется путем добавления имени класса как

  MyClass.abc(); 

Это не зависит от объекта, как вы четко упоминая имя класса во время компиляции, которая не имеет ничего общего с объектом, потому что это статический метод является глобальным для всего объекта. Поэтому любое имя класса, которое вы упомянули, будет вызываться в случае статического метода.

Смежные вопросы