Middle
Mikor kell egy interfészt használni, és mikor egy absztrakt osztályt?
sobes.tech MI
Válasz az MI-től
Az alapvető funkciók és általános állapot létrehozásához absztrakt osztályt használunk, amelyet az alosztályok örökölhetnek. Akkor alkalmas, ha vannak közös módszerek implementációval és felülírni való módszerek. Az absztrakt osztály mezőket és konstruktorokat tartalmazhat.
// Absztrakt osztály
abstract class Animal {
String name;
public Animal(String name) {
this.name = name;
}
abstract void makeSound(); // Absztrakt módszer
void eat() { // Implementációval rendelkező módszer
System.out.println(name + " eszik.");
}
}
Az interfészt arra használjuk, hogy meghatározzunk egy szerződést, amely leírja egy módszerkészletet, amelyet a osztályoknak meg kell valósítaniuk. Ez alkalmas több viselkedés elérésére (többszörös öröklődés). Az interfész nem tartalmazhat állapotot (példánymezőket, kivéve a konstansokat) és konstruktorokat (Java 8 előtt).
// Interfész
interface Flyable {
void fly(); // Absztrakt módszer
}
Az eltérések összehasonlító táblázata:
| Jellemző | Absztrakt osztály | Interfész |
|---|---|---|
| Tagok típusa | Mezők, absztrakt és konkrét módszerek, konstruktorok | Állandók, absztrakt módszerek (alapértelmezett), statikus és default módszerek (Java 8-tól) |
| Módszerek megvalósítása | Lehetnek módszerek implementációval | Csak absztrakt módszerek Java 8-ig, Java 8-tól - static és default |
| Állapot | Lehet állapota (mezők) | Nem lehet állapota (példánymezők) |
| Öröklődés | Egyszerű öröklődés | Többszörös implementáció |
| Használat | "-nak" (is-a) - alap típus | "-nak" (has-a) - viselkedési szerződés |