Рубрики
Без рубрики

Абстрактный класс против интерфейсов. Когда их использовать?

Абстрактный класс “Когда мы говорим об абстрактных классах, мы определяем характеристики абстрактного класса… Помеченный как java, инженерия, ооп.

Абстрактный класс

“Когда мы говорим об абстрактных классах, мы определяем характеристики типа объекта; указываем **, что такое объект. ” ~Хорхе, 2017 год.

Абстрактный класс является “шаблоном” для классов, не может быть создан и должен быть расширен классом. Он используется для определения некоторых общих функций в наборе связанных классов и позволяет реализовать методы по умолчанию.

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

public abstract class Animal {
    public abstract void makeSound();
    public void sleep() {
        System.out.println("Zzz");
    }
}

public class Dog extends Animal {
    public void makeSound() {
        System.out.println("Uff uff!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog snoopy = new Dog();
        snoopy.makeSound();
        snoopy.sleep();
    }
}

Когда использовать абстрактные классы?

Когда вам нужно реализовать код

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

Когда вам нужна инкапсуляция

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

Интерфейс

“Когда мы говорим об интерфейсе и определяем возможности, которые мы обещаем предоставить, мы говорим о заключении контракта о ** том, что может делать объект. ” ~Хорхе, 2017 год.

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

Интерфейсы определяются с помощью ключевого слова интерфейс . В таких языках, как C# и Java, существует стандартное соглашение для префикса всех интерфейсов с помощью I , поэтому интерфейс обработчика файлов будет Обработчиком файлов .

public interface IWallet {
    public void withdraw();
    public void deposit();
    double getBalance();
}

public class Wallet implements IWallet {
    public void withdraw(){
        //do something
    }

    public void deposit() {
        //do something
    }

    double getBalance(){
        //do something
    }

}

Когда использовать интерфейсы?

Когда вам нужно, чтобы класс имел ожидаемое поведение

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

Когда вам нужно множественное наследование

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

Когда вам нужно предоставить общую функциональность несвязанным классам

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

Рекомендации

Абстрактные классы и интерфейсы – Поля разработчика

Java-ООП

Оригинал: “https://dev.to/rellyson/abstract-class-vs-interfaces-when-to-use-them-1d68”