Middle
Երբ պետք է օգտագործել ինտերֆեյսը և երբ՝ աբստրակտ դասը?
sobes.tech AI
Պատասխան AI-ից
Մենք օգտագործում ենք աբստրակտ դաս՝ հիմնական գործառույթությունն ու ընդհանուր վիճակը ստեղծելու համար, որը կարող են ժառանգել ենթակլասները: Դա հարմար է, երբ կան ընդհանուր մեթոդներ իրականացման հետ և մեթոդներ, որոնք պետք է վերագրանցվեն: Աբստրակտ դասը կարող է ունենալ դաշտեր և կոնստրուկտորներ:
// Աբստրակտ դաս
abstract class Animal {
String name;
public Animal(String name) {
this.name = name;
}
abstract void makeSound(); // Աբստրակտ մեթոդ
void eat() { // Իրականացված մեթոդ
System.out.println(name + " ուտում է.");
}
}
Օգտագործում ենք ինտերֆեյս՝ պայմանագիր սահմանելու համար, որը նկարագրում է մեթոդների հավաքածու, որոնք պետք է իրականացնել դասերը: Դա հարմար է բազմակի վարքագիծ ստանալու համար (բազմակի ժառանգություն): Ինտերֆեյսը չի կարող ունենալ վիճակ (միավոր դաշտեր, բացառությամբ կոնստրուկտորների) և կոնստրուկտորներ (Java 8-ից առաջ):
// Ինտերֆեյս
interface Flyable {
void fly(); // Աբստրակտ մեթոդ
}
Տարբերությունների համեմատական աղյուսակ:
| Գծագիր | Աբստրակտ դաս | Ինտերֆեյս |
|---|---|---|
| Անդամների տեսակ | Դաշտեր, աբստրակտ և կոնկրետ մեթոդներ, կոնստրուկտորներ | Կոնստանտներ, աբստրակտ մեթոդներ (նույնպես), ստատիկ և default մեթոդներ (Java 8-ից) |
| Մեթոդների իրականացում | Կարող է ունենալ իրականացման մեթոդներ | Միայն աբստրակտ մեթոդներ Java 8-ց առաջ, Java 8-ից - static և default |
| Կարգավիճակ | Կարող է ունենալ վիճակ (դաշտեր) | Չի կարող ունենալ վիճակ (միավոր դաշտեր) |
| ժառանգություն | Միայնակ ժառանգություն | Բազմակի իրականացում |
| Օգտագործում | "է-ա" (is-a) - հիմնական տեսակ | "պատկանում է" (has-a) - վարքագծի պայմանագիր |