Абстрактный класс
“Когда мы говорим об абстрактных классах, мы определяем характеристики типа объекта; указываем **, что такое объект. ” ~Хорхе, 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”