Sobes.tech
Middle

Kada naudoti sąsają, o kada abstrakčią klasę?

sobes.tech AI

Atsakymas iš AI

Naudojame abstraktų klasę, kad sukurtume bazinę funkcionalumą ir bendrą būseną, kurią gali paveldėti pogrupiai. Ji tinka, kai yra bendri metodai su įgyvendinimu ir metodai, kurie turi būti perrašyti. Abstrakti klasė gali turėti laukus ir konstruktorius.

// Abstrakti klasė
abstract class Animal {
    String name;

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

    abstract void makeSound(); // Abstraktus metodas

    void eat() { // Metodas su įgyvendinimu
        System.out.println(name + " valgo.");
    }
}

Naudojame sąsają, kad apibrėžtume sutartį, aprašantį metodų rinkinį, kurį turi įgyvendinti klasės. Ji tinka daugybinio elgesio (daugybinio paveldėjimo funkcionalumo) pasiekimui. Sąsaja negali turėti būsenos (kintamųjų laukų, išskyrus konstantas) ir konstruktorių (iki Java 8).

// Sąsaja
interface Flyable {
    void fly(); // Abstraktus metodas
}

Palyginimo lentelė:

Savybė Abstrakti klasė Sąsaja
Narių tipas Laukai, abstraktūs ir konkretūs metodai, konstruktoriai Konstantos, abstraktūs metodai (numatyti), statiniai ir default metodai (nuo Java 8)
Metodų įgyvendinimas Gali turėti įgyvendintus metodus Tik abstraktūs metodai iki Java 8, nuo Java 8 - static ir default
Būsenos Gali turėti būseną (laukus) Negali turėti būsenos (kintamųjų laukų)
Paveldėjimas Viengubas paveldėjimas Daugialypis įgyvendinimas
Naudojimas "yra" (is-a) - bazinis tipas "turi" (has-a) - elgesio sutartis