Sobes.tech
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