Progress28.ru

IT Новости
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Виртуальные функции java

Можете ли вы написать виртуальные функции / методы на Java?

можно писать виртуальный методы в Java, как это было бы в C++?

или, есть ли правильный подход Java, который вы можете реализовать, который производит подобное поведение? Могу я привести несколько примеров?

6 ответов

с Википедия

на Java, все нестатические методы по по умолчанию «виртуальные функции.» только методы, отмеченные ключевое слово final, который нельзя отменить, вместе с частные методы, которые не в наследство, являются non-virtual.

можете ли вы писать виртуальные функции на Java?

да. Фактически, все методы экземпляра в Java являются виртуальными по умолчанию. Только некоторые методы не являются виртуальными:

  • методы класса (потому что обычно каждый экземпляр содержит информацию, такую как указатель на vtable о его конкретных методах, но экземпляр здесь недоступен).
  • методы частного экземпляра (поскольку ни один другой класс не может получить доступ к методу, вызывающий экземпляр всегда имеет тип определение самого класса и поэтому однозначно известно во время компиляции).

вот несколько примеров:

«нормальные» виртуальные функции

следующий пример из старая версия страницы Википедии, упомянутой в другом ответе.

пример с интерфейсами

Java методы интерфейса все виртуальный. Они!—33—>должны быть виртуальными, потому что они полагаются на классы реализации для предоставления реализаций метода. Код для выполнения будет выбран только во время выполнения.

пример с виртуальными функциями с абстрактными классами.

похож на интерфейсы абстрактные классы должны содержать виртуальные методы, потому что они полагаются на расширение классов реализация. Например:

все функции в Java являются виртуальными по умолчанию.

вы должны сделать все возможное, чтобы написать не виртуальные функции, добавив ключевое слово «final».

Это противоположность C++/C# по умолчанию. По умолчанию функции класса не являются виртуальными; вы делаете их так, добавляя модификатор «virtual».

Читать еще:  Разработка игр на javascript

все non-private методы экземпляра являются виртуальными по умолчанию в Java.

В C++, частные методы могут быть виртуальными. Это можно использовать для идиомы non-virtual-interface (NVI). В Java вам нужно будет защитить переопределяемые методы NVI.

из спецификации языка Java, v3:

8.4.8.1 переопределение (методами экземпляра) метода экземпляра m1 объявленные в классе C может другой метод экземпляра, м2, объявленный в классе A iff все следующие верны:

  1. C является подклассом А.
  2. подпись M1 подподписью (§8.4.2) подписи м2.
  3. либо * m2 является общедоступным, защищенным или объявленным с доступом по умолчанию в пакет C или * m1 переопределяет метод m3, M3, отличный от M1, m3, отличный от m2, таким образом, что m3 переопределяет m2.

Да, вы можете писать виртуальные «функции» на Java.

Ссылка на основную публикацию
Adblock
detector
×
×