Почему абстрактные методы абстрактны? - PullRequest
0 голосов
/ 01 августа 2020

Быть абстрактным - значит скрывать данные. Я не понимаю, как абстрактные методы скрывают от пользователя какие-либо данные. Можно привести аргумент, что абстрактные методы не требуют реализации, кроме как в общей схеме иерархии классов, которая ничего не скрывает от пользователя. Абстрактные методы кажутся просто принудительной реализацией, поэтому я не понимаю, почему они абстрактны.

Ответы [ 4 ]

6 голосов
/ 01 августа 2020

Хотя абстрактные классы и методы могут использоваться для сокрытия данных, «абстрактный» не означает «скрытие данных». Спецификация языка Java определяет такие абстрактные классы и методы:

Абстрактный класс - это класс, который является неполным или считается неполным .

Объявление абстрактного метода представляет метод как член, [...], но не предоставляет реализацию (§8.4.7). Метод, который не является абстрактным, может называться конкретным методом.

Абстрактные классы могут использоваться для скрытия данных. Например, java .awt.Toolkit - это абстрактный класс, но его конкретные реализации являются частными. Чтобы использовать Toolkit, вы получаете экземпляр с помощью фабричного метода stati c getDefaultToolkit, который возвращает экземпляр конкретного класса, но вы не знаете, какой именно. Предоставляя publi c абстрактный класс Toolkit, вы можете использовать услуги, предоставляемые этим классом, но «данные» (конкретная реализация) скрыты от вас.

2 голосов
/ 01 августа 2020

Для чего-то быть абстрактным - значит скрыть данные.

Я думаю, ваше замешательство происходит из-за этой (неправильной) предпосылки.

Бытие абстрактное лучше понимать как не имеющий реализации. Это противоположно конкретному (т.е. с реализацией).

См. Статью abstract type из Википедии:

В языках программирования, абстрактный тип - это тип в системе именительного падежа, который не может быть создан напрямую; тип, который не является абстрактным - который может быть создан - называется конкретным типом.

1 голос
/ 01 августа 2020

Я думаю, когда вы используете фактическое определение абстрактного, номенклатура Java абстрактных методов имеет больше смысла:

существующих в мысли или как идеи, но не имеющих физического или конкретного существования

Это имеет смысл, поскольку Java абстрактные методы - это определения методов без реализаций.

0 голосов
/ 01 августа 2020

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

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

  1. Набор основных реализованных методов, унаследованных от абстрактного класса, которые не обязательно будут различаться от одной реализации к другой.
  2. Набор сигнатур методов (нереализованных методов), указанных абстрактным классом, которые должны быть реализованы в подклассах и чьи реализации могут отличаться от одной реализации к другой в зависимости от требований подкласса.
  3. Любые другие дополнительные методы, которые авторы требуется ощущение подкласса, которое не указано в абстрактном классе.

1 и 2 выше составляют абстрактный класс.

В случае (1) выше, эти методы могут могут быть отменены, если автор подкласса считает это необходимым (если только эти методы не объявлены final ).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...