2015-04-30 4 views
4

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

Почему мы вынуждены добавить ключевое слово abstract перед abstract method из abstract class, когда нам не нужно, чтобы добавить ключевое слово в случае interface?

Возможный ответ может быть:
как абстрактный класс может представлять собой смесь из бетона и абстрактных методов, «абстрактного» ключевого слова используется, чтобы идентифицировать, какой метод (ы) абстрактные.
Но
Когда мы не даем организму каких-либо методов, а также использовать ; в конце декларации, то, что может пойти не так, если она рассматривается как абстрактный метод автоматически?

+2

Способы, объявленные в интерфейсах, являются 'public abstract' по умолчанию, поэтому. Они на самом деле абстрактны. – fge

ответ

4

Почему мы вынуждены добавлять ключевое слово abstract перед абстрактным методом абстрактного класса, когда нам не нужно добавлять ключевое слово в случае интерфейса.

Внутри интерфейсов все определения методов неявно abstract. Однако вы можете указать ключевое слово, но не будет никакой разницы.

В пределах классов abstract, однако, если вы хотите обозначить метод как abstract, вам необходимо ввести ключевое слово abstract. Это делает код более понятным и понятным.

+0

удобочитаемость - очень действительная точка, но до тех пор, пока она не объяснит, почему она требуется вместо необязательной. – Saif

+0

мы можем заключить, что «это то, как язык разработан»? – Saif

+1

@Saif, потому что, если бы это было необязательно, все пропустили бы его. :) –

4

Не все методы абстрактного класса должны быть абстрактными. Фактически, вы можете иметь абстрактный класс без абстрактных методов.

С другой стороны, все методы, определенные в interface, неявно public abstract, и поэтому вы можете отказаться от определителя.

+0

хорошо, я понимаю, почему я могу отбросить квалификатор в случае интерфейса. Мой вопрос в том, почему это требуется в случае абстрактного класса. потому что абстрактный метод может быть идентифицирован 'no body' и'; 'в конце. – Saif

+1

Kocko упомянутый читаемость. Простое включение или отсутствие односимвольного '' 'было бы легко пропустить, когда вы быстро прочитали код, особенно в конце большой сигнатуры сообщения. – vikingsteve

+1

@ vikingsteve точка OP: абстрактный метод не имеет тела метода ... как кто-нибудь мог бы неправильно понять это? ';' в конце строки неважно. Поэтому я согласен, что «абстрактная» кажется излишней. –

0

Два ответов

  1. То только язык способа разработан
  2. абстрактные методы предназначены для переопределены в дочерних классах и это означает, что можно делать различные оптимизации некоторой ВМ, когда они видят абстрактное ключевое слово

КПП. В java 4 было фактически абстрактное ключевое слово в интерфейсах. Теперь он считается устаревшим

1

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

+0

, так что вы говорите о 'удобочитаемости', как упоминалось @kocko – Saif

+0

Да, подумать, относится ли это к пониманию и читаемости. – kondu

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