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 |