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 |