Sobes.tech
Middle

Mis vahe on abstraktsel klassil ja liideseil?

sobes.tech AI

Vastus AI-lt

Klass abstrakt — see on klass, mis võib sisaldada nii rakendatud meetodeid kui ka abstraktseid (ilma rakenduseta) meetodeid. See toimib alusena päriluseks ja võib sisaldada olekut (välju).

Liides (Interface) — on leping, mis määratleb meetodite kogumi ilma rakenduseta (klassikalises mõttes). Klass, mis liidest rakendab, peab rakendama kõiki selle meetodeid.

Peamised erinevused:

  • Abstraktne klass võib sisaldada rakendust ja olekut, liides — ainult meetodi signatuure (mõnes keeles võivad liidesed sisaldada vaikimisi meetodeid).
  • Klass võib pärida ainult ühest abstraktsest klassist, kuid võib rakendada mitmeid liideseid.
  • Abstraktne klass pakub osalist rakendust, liides — ainult lepingut.

Näide Java keeles:

abstract class Animal {
    void eat() { System.out.println("Toit"); }
    abstract void sound();
}

interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    void sound() { System.out.println("Kukub"); }
    public void fly() { System.out.println("Lennata"); }
}