Наслідування — це один з основних принципів об'єктно-орієнтованого програмування, де клас може успадковувати характеристики та поведінку іншого класу. Клас, що передає свої атрибути та методи, є батьківським, а клас, який їх отримує, — дочірнім. Це дозволяє створювати зручніші та менш залежні системи, полегшуючи заміну компонентів і модулів.
Одним із способів покращити структуру проектів є використання абстрактних класів та інтерфейсів. Вони допомагають зменшити залежність від конкретних реалізацій і полегшити додавання нових можливостей у систему. Однак важливо розуміти різницю між абстрактними класами та інтерфейсами, оскільки правильне їх використання може значно полегшити підтримку та розвиток системи.
Абстрактні класи
Абстрактні класи можуть містити як абстрактні, так і конкретні методи, а також приватні, захищені або публічні атрибути. Вони можуть мати статичні та нестатичні члени. У мовах, як Java, клас може успадковувати лише один інший клас, а якщо це конкретний клас, то він обов'язково має реалізувати всі абстрактні методи. Абстрактні методи не мають реалізації, лише підпис, що визначає, що метод має робити, але не як це реалізовано. Щоб оголосити метод абстрактним, використовують ключове слово abstract.
public abstract class EnviadorMensagem {
public abstract int enviarMensagem(string mensagem, string destinatario);
}
Для успадкування класу в Java використовується ключове слово extends
:
public class EnviadorMensagemEmail {
public ProvedorServicoEmail provedorServicoEmail;
@Override
public int enviarMensagem(string mensagem, string destinatario) {
provedorServicoEmail.enviar(mensagem, destinatario);
return provedorServicoEmail.getCodigoStatusMensagem();
}
}
Анотація @Override показує, що метод переписує метод з батьківського класу. Хоча вона необов'язкова, її варто використовувати для чіткості. Якщо потрібно використовувати логіку батьківського методу, можна застосувати ключове слово super.
Інтерфейси
Інтерфейси дозволяють класу успадковувати поведінку від кількох інших інтерфейсів, на відміну від класів, де є лише єдине наслідування. Проте інтерфейси мають певні обмеження: вони не можуть містити приватні або захищені члени, і їхні атрибути мають бути статичними або фінальними. За замовчуванням усі методи інтерфейсів є абстрактними, але за допомогою ключового слова default можна задавати стандартну реалізацію для методів.
public interface AcessadorRecursos {
File acessarArquivoRecurso(String nomeRecurso);
default Path obterCaminhoRecurso(String nomeRecurso) {
return acessarArquivoRecurso(nomeRecurso).toPath();
}
}
Для реалізації інтерфейсу в Java використовується ключове слово implements, а якщо реалізуються кілька інтерфейсів, їх розділяють комами. Коли клас успадковує клас і реалізує інтерфейси, спочатку йде extends, а потім implements.
Records
Record — це особливий тип класу, що дозволяє зберігати і групувати дані, такі як інформація про людину або автомобіль. Дані в record є незмінними після створення, що забезпечує їх захист від змін. Вони також є публічними, що дозволяє звертатися до значень без необхідності створювати методи доступу. Крім того, records можуть містити методи для зручнішого отримання та форматування даних.
public record Pessoa(String nome, String sobrenome);
// З методами для зручності
public record Pessoa(String nome, String sobrenome) {
public string getNomeCompleto() {
return nome + sobrenome;
}
}
Висновок
Хоча багато хто вже писав про ці концепції, я вирішив поділитися цією статтею, щоб зробити навчальний процес цікавішим для моїх одногрупників. Спасибі, що прочитали!
Джерела
- https://stackoverflow.com/questions/34761534/java-non-static-member-variable-of-an-interface
- https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Record.html
Перекладено з: Classes Abstratas, Interfaces e Records