Вход / Регистрация


Вход на сайт:
Логин: 
Пароль: 


Впервые здесь?
 
Регистрация [?]:
Регистрация у нас позволит:
  • Покупать платные продукты из каталога и иметь к ним доступ в любое время
  • Задавать вопросы другим людям, участвовать в дискуссиях
  • Публиковать свои расширения, программы и софт, если Вы разработчик или дистрибьютор
  • Добавлять интересные ссылки и иметь к ним доступ из любой точки, где есть выход в Интернет
  • Следить за обновлениями сервиса и получать дополнительные возможности, которых не имеют обычные гости
  • Следить за новыми статьями и получать новые знания
Выберите логин:
Ваш Email:
Введите результат выполнения операции (цифрами):
11 - 5 = ? Обновить

Абстрактные методы и классы в Java PDF Печать E-mail
Автор: Максим   
29.05.2015 22:12
Понравилось:
1


Не понравилось: 0
Недоступен ни один перевод.

Абстрактный класс в Java - это класс, который объявлен какabstract. Он может как содержать абстрактные методы, так и не содержать. Нельзя создать экземпляр абстрактного класса, от него можно только отнаследоваться.

Абстрактный метод в Java - это метод, который объявлен без реализации, т.е. без фигурных скобок. Объявление абстрактного метода просто заканчивается точкой с запятой. Например:


abstract void paintCircle(double centerX, double centerY, int radius);

Если класс содержит абстрактные методы, то класс обязательно должен быть сам отмечен как абстрактный.


package ru.allineed.inheritance.classes; 
Недоступен ни один перевод.

Абстрактный класс в Java - это класс, который объявлен какabstract. Он может как содержать абстрактные методы, так и не содержать. Нельзя создать экземпляр абстрактного класса, от него можно только отнаследоваться.

Абстрактный метод в Java - это метод, который объявлен без реализации, т.е. без фигурных скобок. Объявление абстрактного метода просто заканчивается точкой с запятой. Например:


abstract void paintCircle(double centerX, double centerY, int radius);

Если класс содержит абстрактные методы, то класс обязательно должен быть сам отмечен как абстрактный.


package ru.allineed.inheritance.classes;

abstract class SaySomething {
	// объявление полей
	// объявление неабстрактных методов
	abstract void sayGreeting(String greeting);
	abstract void sayFarewell(String farewell);
}

Когда некоторый класс наследуется от абстрактного класса, то, как правило, он переопределяет все абстрактные методы родительского класса. Однако, если это не так, то дочерний класс также должен быть помечен, какabstract. Рассмотрим на примерах:

Случай 1 - создаем класс-наследникSaySomethingEnglishот упомянутого выше абстрактного классаSaySomethingи переопределяем все абстрактные методы класса-родителя. В этом случае имеем право дочерний класс сделать неабстрактным:


package ru.allineed.inheritance.classes;

public class SaySomethingEnglish extends SaySomething {

	@Override
	void sayGreeting(String greeting) {
		System.out.println("Hello!");
	}

	@Override
	void sayFarewell(String farewell) {
		System.out.println("Bye-bye!");
	}
}}

Случай 2 - создаем класс-наследникSaySomethingFrenchот абстрактного классаSaySomethingи переопределяем только часть абстрактных методов класса-родителя. В этом случае дочерний класс также обязан быть абстрактным:


package ru.allineed.inheritance.classes;

public abstract class SaySomethingFrench extends SaySomething {

	@Override
	void sayGreeting(String greeting) {
		System.out.println("Bonjour!");
	}

	// метод sayFarewell не переопределили,
	// поэтому дочерний класс обязательно тоже абстрактный
	abstract void sayFarewell(String farewell);
}}

Методы в интерфейсе, которые не объявлены как default или static, неявно являются абстрактными, поэтому модификатор abstract не используется с методами интерфейса. Он может быть применён, но это не является обязательным. 

Абстрактные классы в сравнении с интерфейсами

Абстрактные классы схожи с интерфейсами. Вы не можете создавать экземпляры абстрактных классов, и они содержат смесь методов, объявленных с реализацией или без неё. Однако в абстрактных классах, Вы можете создавать поля, которые не являются статическими (static) или финальными (final), а также можете определять открытые (public), защищенные (protected) и закрытые (private) конкретные методы. В интерфейсах все поля автоматически являются public, static и final, а все методы, которые Вы объявляете, являются public. В добавление к этому, Вы можете наследоваться только от одного класса - не важно, абстрактный он или нет, в то время как можете реализовать любое количество интерфейсов.

Что именно лучше использовать - абстрактные классы или интерфейсы?

Рассмотрите возможность использования абстрактных классов, если любое из следующих утверждений применимо к Вашей ситуации:

  • Вы хотите разделять код между несколькими тесно связанными классами.
  • Вы ожидаете, что классы, которые расширяют Ваш абстрактный класс, имеют множество общих методов или полей, или требуют модификаторов доступа, отличных от public (например, protected и private).
  • Вы хотите определить не-static и не-final поля. Это позволит Вам определить методы, которые могут получить доступ к объекту или изменить состояние объекта, которому они принадлежат.

Рассмотрите возможность использования интерфейсов, если любое из следующих утверждений применимо к Вашей ситуации:

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

Обновлено 30.05.2015 00:38
 

Нашли ошибку?

Система Orphus

Оплата на сайте

Яндекс.Деньги
www.megastock.ru
Здесь находится аттестат нашего WM идентификатора 207935874510
Проверить аттестат

Статистика сайта

Яндекс.Метрика

Мы в Интернете


Allineed.Ru © 2009-2012 - Allineed.Ru - ответы на IT вопросы, статьи о разработке, IT и программном обеспечении. При использовании материалов сайта ссылка обязательна. Использование данного сайта и любой его части означает принятие условий Пользовательского Соглашения.
Allineed.Ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters. The Joomla! name and logo is used under a limited license granted by Open Source Matters the trademark holder in the United States and other countries.