Sobes.tech
Middle

Kad jālieto interfeiss un kad abstrakta klase?

sobes.tech AI

Atbilde no AI

Mēs izmantojam abstraktu klasi, lai izveidotu pamatfunkcionalitāti un kopējo stāvokli, ko var mācīties apakšklases. Tā ir piemērota, ja ir kopējas metodes ar realizāciju un metodes, kuras jāpārdefinē. Abstrakta klase var saturēt laukus un konstruktorus.

// Abstrakta klase
abstract class Animal {
    String name;

    public Animal(String name) {
        this.name = name;
    }

    abstract void makeSound(); // Abstrakta metode

    void eat() { // Metode ar realizāciju
        System.out.println(name + " ēd.");
    }
}

Mēs izmantojam saskarni, lai definētu līgumu, kas apraksta metožu kopumu, kuras jārealizē klasēm. Tā ir piemērota daudzlīmeņa uzvedības (daudzlīmeņa mantošanas funkcionalitātes) sasniegšanai. Saskarne nevar saturēt stāvokli (instanču laukus, izņemot konstantes) un konstruktorus (līdz Java 8).

// Saskarne
interface Flyable {
    void fly(); // Abstrakta metode
}

Salīdzināšanas tabula:

Īpašība Abstrakta klase Saskarne
Locekļu tips Lauki, abstrakti un konkrēti metodi, konstruktori Konstantes, abstrakti metodi (noklusējuma), statiski un noklusējuma metodi (no Java 8)
Metožu realizācija Var saturēt realizētus metodes Tikai abstrakti metodes līdz Java 8, ar Java 8 - static un default
Stāvoklis Var saturēt stāvokli (laukus) Nevar saturēt stāvokli (instanču laukus)
Mantošana Vienkārša mantošana Daudzlīmeņu realizācija
Lietošana "ir" (is-a) - pamatveids "ir" (has-a) - uzvedības līgums