undefined

Абстрактный класс vs. интерфейс

Java Core
3 уровень , 7 лекция
Открыта

— Привет, Амиго! Билаабо расскажет тебе о различиях абстрактного класса и интерфейса. Их несколько.

Абстрактный класс Интерфейс
Наследование
Абстрактный класс может унаследоваться только от одного класса и любого количества интерфейсов. Интерфейс не может наследоваться от классов, но может от любого количества интерфейсов.
Абстрактные методы
Абстрактный класс может содержать абстрактные методы. Но может и не содержать их вообще. Все не статические и не default методы интерфейса – абстрактные – не содержат реализации. Интерфейс может не содержать никаких методов вообще.
Методы с реализацией
Абстрактный класс может содержать методы с реализацией. Интерфейс может содержать методы по умолчанию (default methods).
Данные
Никаких ограничений. Интерфейс содержит только public final static данные.
Создание объекта
Нельзя создать объект абстрактного класса. Нельзя создать объект интерфейса.

— Вот это я понимаю. Кратко и по существу.

— Спасибо, Амиго.

Комментарии (207)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Алексей Болдырев 13 уровень, Астрахань
11 мая 2021
А для чего может понадобиться интерфейс без методов?
Nick 20 уровень
17 апреля 2021
В C# договорились писать интерфейсы добавляя впереди большую букву I

public interface IDrinker
, очень удобно однако, жалко тут такого нет😕
kefx 19 уровень, Санкт-Петербург
14 апреля 2021
Братан, ты так меня раздражал в начале, и я так скучал по тебе сейчас!
Ivan Z 22 уровень, Санкт-Петербург
21 марта 2021
Ну это-то все понятно, а как там с абстрактными классами в Паскале, чувак?
Sasha 19 уровень
9 марта 2021
Вау, Билаабо из бэк! Я скучал
Максим 41 уровень, Санкт-Петербург
24 января 2021
А разве static методы не относятся к разделу "Методы с реализацией" у интерфейсов?
5 января 2021
Единственное место где можно накрутить лайков!
🦔 Виктор 20 уровень, Москва Expert
2 января 2021
Весьма неплохо написаны последние лекции: лаконично, ёмко, с доступными примерами, приятно читать. 1. Разница между абстрактными классами и интерфейсами. 2. © Ayrat. 3. Всё получится!
M10beretta 24 уровень, Минск
30 декабря 2020

Разница между абстрактными классами и интерфейсами
    abstract class                  interface

1 Ключевое слово создания
    abstract                        interface

2 Ключевое слово реализации
    extends                         implements

3 Могут быть вложенными
                    да могут

4 Конструктор
    разрешен                        запрещен

5 Поля
    static / not-static             любое становится по умолчанию
    final / not-final               public static final
                                    (также могут быть определены
                                    статические константы)

6 Модификаторы доступа полей и методов
    public                          public (можно не писать) /
    protected                       private [после Java 9]
    по умолчанию
    private

7 Реализация методов по умолчанию
    допустима                       допустима static
                                    допустима default (not-static)
                                    [до Java 8 запрещена - только объявление]

8 Наследование
    может расширить (extends)       может расширить (extends)
    любой один класс                до 65535 интерфейсов
    и реализовать (implements)
    до 65535 интерфейсов

9 Создание объекта
                    нельзя создать
Антон 20 уровень, Москва
26 декабря 2020
Какое слово в каком случае использовать, для себя запомнил так: class - слово короткое, и extends - тоже короткое; interface - слово длинное, и implements - тоже длинное. Но интерфейс от интерфейса наследуется по правилам для класса. Поэтому:

class <- class : extends;           //класс расширяется от класса
class <- interface : implements;    //класс реализовывается от интерфейса
interface <- interface : extends;   //интерфейс расширяется от интерфейса
При наследовании одинакового используем extends, при наследовании разного - implements.