Sobes.tech
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) - վարքագծի պայմանագիր