Sobes.tech
Middle

Millal kasutada liidest ja millal abstraktset klassi?

sobes.tech AI

Vastus AI-lt

Me kasutame abstraktset klassi, et luua põhifunktsionaalsus ja üldine seisund, mida alamklassid saavad pärida. See sobib, kui on ühised meetodid koos rakendusega ja meetodid, mida tuleb üle kirjutada. Abstraktne klass võib omada välju ja konstruktorid.

// Abstraktne klass
abstract class Animal {
    String name;

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

    abstract void makeSound(); // Abstraktne meetod

    void eat() { // Meetod koos rakendusega
        System.out.println(name + " sööb.");
    }
}

Me kasutame liidest, et määratleda leping, mis kirjeldab meetodite kogumit, mida klassid peavad rakendama. See sobib mitme käitumise (mitme pärimise funktsionaalsus) saavutamiseks. Liides ei saa omada seisundit (liikmevälju, välja arvatud konstante) ja konstruktorid (kuni Java 8).

// Liides
interface Flyable {
    void fly(); // Abstraktne meetod
}

Võrdlustabel:

Omadus Abstraktne klass Liides
Liikmed Väljad, abstraktset ja konkreetset meetodid, konstruktorid Konstantid, abstraktset meetodid (vaikimisi), staatilised ja default meetodid (Java 8-st alates)
Meetodite rakendamine Võib omada meetodeid koos rakendusega Ainult abstraktset meetodit kuni Java 8, Java 8-st alates - static ja default
Seisund Võib omada seisundit (välju) Ei saa omada seisundit (liikmevälju)
Pärimine Ühekordne pärimine Mitme pärimine
Kasutamine "on" (is-a) - põhityyp "omab" (has-a) - käitumise leping