Middle
Када треба користити интерфејс, а када апстрактну класу?
sobes.tech АИ
Одговор од АИ
Koristimo apstraktnu klasu za kreiranje osnovne funkcionalnosti i opšteg stanja koje mogu naslediti podklase. Pogodna je kada postoje zajedničke metode sa implementacijom i metode koje treba da budu prepisane. Apstraktna klasa može imati polja i konstruktore.
// Apstraktna klasa
abstract class Animal {
String name;
public Animal(String name) {
this.name = name;
}
abstract void makeSound(); // Apstraktna metoda
void eat() { // Metoda sa implementacijom
System.out.println(name + " jede.");
}
}
Koristimo interfejs za definisanje ugovora koji opisuje skup metoda koje klase moraju da implementiraju. Pogodan je za postizanje višestrukog ponašanja (višestruko nasleđivanje funkcionalnosti). Interfejs ne može imati stanje (polja instance, osim konstanti) i konstruktore (pre Java 8).
// Interfejs
interface Flyable {
void fly(); // Apstraktna metoda
}
Tabela poređenja razlika:
| Osobina | Apstraktna klasa | Interfejs |
|---|---|---|
| Tip članova | Polja, apstraktne i konkretne metode, konstruktori | Konstantne, apstraktne metode (po defaultu), statičke i default metode (od Java 8) |
| Implementacija metoda | Može imati metode sa implementacijom | Samo apstraktne metode do Java 8, od Java 8 - static i default |
| Stanje | Može imati stanje (polja) | Ne može imati stanje (polja instance) |
| Nasleđivanje | Jednolinijsko nasleđivanje | Višestruka implementacija |
| Upotreba | "je-" (is-a) - osnovni tip | "ima-" (has-a) - ugovor o ponašanju |