Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Интерфейс vs Абстрактный класс в Java: Как выбрать правильную абстракцию

Что такое интерфейс?

В Java интерфейс определяет контракт, который классы могут реализовать. Все методы, объявленные в интерфейсе, по умолчанию абстрактны, то есть не содержат тела. Интерфейсы не могут быть инстанцированы напрямую; они лишь описывают поведение.

Интерфейсы не могут хранить переменные экземпляра, но могут объявлять константы с модификаторами public static final.

Что такое абстрактный класс?

Абстрактный класс — это класс, который не может быть инстанцирован и может содержать как абстрактные методы (без тела), так и конкретные методы (с реализацией). Требуется хотя бы один абстрактный метод.

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

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

Зачем использовать интерфейс?

Зачем использовать абстрактный класс?

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

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

Аспект Интерфейс Абстрактный класс
Скорость поиска Обычно медленнее из-за динамической диспетчеризации Быстрее со статической диспетчеризацией, когда возможно
Множественное наследование Поддерживает реализацию многих интерфейсов Только одиночное наследование
Тела методов Только абстрактные (до Java 8) или default/static (Java 8+) Могут содержать как абстрактные, так и конкретные методы
Состояние Не может объявлять поля экземпляра Может объявлять поля экземпляра и конструкторы
Вариант использования Определение возможностей, которые можно смешивать в несвязанных классах Предоставление общей базы с общей реализацией
Доступность членов Все члены неявно public Члены могут иметь protected, public или private видимость
Расширение других типов Может расширять другие интерфейсы Может расширять класс и реализовывать интерфейсы
Конструкторы Не может определять конструкторы Может определять конструкторы для подклассов
Константы Может определять константы (public static final) Может определять константы и обычные поля

Пример кода: Интерфейс и Абстрактный класс в Java

Ниже приведены краткие примеры, иллюстрирующие, как объявлять и использовать интерфейс и абстрактный класс.

Синтаксис интерфейса

interface Name {
    // объявления методов
}

Пример Java-интерфейса

interface Pet {
    void test();
}
class Dog implements Pet {
    public void test() {
        System.out.println("Interface method implemented");
    }
    public static void main(String[] args) {
        Pet p = new Dog();
        p.test();
    }
}

Синтаксис абстрактного класса

abstract class Name {
    // код
}

Пример абстрактного класса

abstract class Shape {
    int b = 20;
    abstract void calculateArea();
}
class Rectangle extends Shape {
    public static void main(String[] args) {
        Rectangle obj = new Rectangle();
        obj.b = 200;
        obj.calculateArea();
    }
    void calculateArea() {
        System.out.println("Area is " + (b * b));
    }
}

java

  1. Прямая и обратная сварка: ключевые различия и когда применять каждую технику
  2. Железо против стали: ключевые различия объяснены
  3. Резные против проволочных гвоздей: понимание ключевых различий для строительства
  4. Плазменная против лазерной резки: ключевые различия и когда применять каждую
  5. Токарная и фрезерная фуговка: ключевые различия
  6. Фрезерование против шлифовки: ключевые различия
  7. Абстрактные классы и методы в Java: полное руководство
  8. Интерфейсы в Java: концепции, реализация и лучшие практики
  9. Абстракция в Java: упрощение кода и повышение читаемости
  10. Интерфейсы в Java: определение, использование и лучшие практики