Сегодня 2 декабря, понедельник ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7276
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
Главная /

Главные темы

/

Тэг «coolux»

Главные темы

Abstract class vs. Interface

   2013-11-06 23:45:00
Долго меня мучил вопрос чем же все таки отличаются abstract class и interface в java.

Если посмотреть на определение то abstract class это базовый класс, который не предполагает создания экземпляров. А Interface это описание предполагаемого поведения класса, не упоминая конкретных действий. Другими словами интерфейс предполагает только объявление методов и полей для реализующего данный интерфейс класса.
Пример интерфейса A:
public interface IContent {
public void getUser();
public void getValue();
}
В интерфейсе все поля и методы должны быть публичными (public). В данном примере мы создали интерфейс Content и указали два метода: getUser и getValue.

Теперь нам нужно создать несколько классов, которые реализуют данный интерфейс. Так как просто контента быть не может, а может быть статья, коментарий, файл на скачку ролик, поэтому нам их надо реализовать.
public class Post implements IContent{
@Override
public void getUser()
// тут его реализация
}
@Override
public void getValue()
// тут его реализация
}
}
...

public class Video implements IContent{
@Override
public void getUser()
// тут его реализация
}
@Override
public void getValue()
// тут его реализация
}
}
И так далее. Вполне нормально, но метод getUser() для всех одинаков. Поэтому не самое лучшее решение в каждом классе его реализовывать. Поэтому нам лучше сделать так:
public abstract class AContent {
private String user;
public String getUser(){
return user;
}
public abstract String getValue();
}

public class Post extends extends AContent{
public Post(){
// тут конструктор
}
@Override
public void getValue()
// тут его реализация
}
}
...

public class Video extends AContent{
public Video(){
// тут конструктор
}
@Override
public void getValue()
// тут его реализация
}
}

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

Аспект abstract class interface
Назначение Как любой базовый класс, представляет ядро поведения для всех наследников. Если в абстрактном классе не реализован ни один метод, имеет смысл превратить его в интерфейс. Контракт, ничего более. Интерфейсы часто используются (и во основном предназначены для этого) как примеси без реализации при проектировании иерархии классов.
Реализация по умолчанию Может быть частично или полностью реализован, предоставлять базовую функциональность. Не может содержать какой-либо код.
Модификаторы доступа членов Члены могут иметь все допустимые модификаторы доступа. Только public.
Наследование Наследование от абстрактного класса реализует отношение "является". Наследование от интерфейса определяет отношение "реализует".
Множественное наследование Класс может наследовать только один класс. Класс может наследовать несколько интерфейсов. При этом он может и не реализовывать методы интерфейса, т. е. быть абстрактным. Сам интерфейс тоже может наследовать несколько интерфейсов.
Расширение При добавлении нового метода в абстрактный класс, мы можешь реализовать его, тем самым не нарушив работу наследующих классов. Если тело метода оставить нереализованным, потребуется его реализация в классах-наследниках с последующей перекомпиляцией. При добавлении нового метода в интерфейс мы должны определить его во всех классах, реализующих интерфейс, с перекомпиляцией.
Члены Может содержать все допустимые члены. Только методы, свойства

Вывод:
1. если есть для классов нет одинаковых методов в плане реализации, а есть только одинаковые методы в плане объявления, то лучше использовать Interface.
2. Если есть сущность действительно абстрактная и в ней можно реализовать методы для наследников, то лучше использовать abstract class.
3. Если ничего из выше перечисленного нет, то нужно сделать родительский класс от которого будите наследоваться.

Тэги: abstract, class, interface


Fresh in the Shop: French collection Roussilhe covers all bases

   2013-11-06 06:06:00
+ развернуть текст   сохранённая копия

Тэги: best, buy, classic, colorful, cool, evil, eyeglasses, eyes, eyewear, fall, fight, frames, fremont, glasses, great, metal, place, round, seattle, trends


UGG Classic Cardy Boots 5819 Rose

   2013-11-02 14:07:30
A wooden buttons etched using uggs black friday 2013 the signature of UGG logo allow this boot to ...
+ развернуть текст   сохранённая копия

Тэги: black, boots, cheap, classic, friday, mini, online, sale, ugg, uggs, women, полезное


Status Quo – Back2SQ1 – The Frantic Four Reunion (2013)

   2013-10-17 21:45:52
Artist: Status Quo Album: Back2SQ1 – The Frantic Four Reunion Genre: Classic Rock Country: UK ...
+ развернуть текст   сохранённая копия

Тэги: classic, rock


Создатель Clash of Clans получил инвестиции в размере 1,5 млрд долларов

   2013-10-16 16:45:16
Разработчику игры Clash of Clans подставили крепкое финансовое плечо для создания компании, похожей ...
+ развернуть текст   сохранённая копия

Тэги: clans, clash, supercell, видеоигры


Страницы: ... 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 ... 

 

Главная / Главные темы / Тэг «coolux»
Самый-самый блог
Блогер Рыбалка
Рыбалка
по среднему баллу (5.00) в категории «Спорт»


Загрузка...Загрузка...