Sobes.tech
Junior
173

Абстрактты класс пен абстрактты әдіс арасындағы айырмашылық қандай, сондай-ақ абстрактты әдіс пен интерфейс арасындағы айырмашылық қандай?

AI-дан жауап

sobes.tech AI

Абстрактты класс — бұл тікелей жасай алмайтын (инстанцировать) класс. Ол абстрактты және абстрактты емес әдістерді, өрістерді, конструкторларды қамтуы мүмкін. Бұл ұрпақтар үшін жалпы сипаттамалар мен мінез-құлықтарды анықтау үшін пайдаланылады.

Абстрактты әдіс — бұл жүзеге асырылмаған әдіс (денесі жоқ). Ол abstract кілт сөзімен абстрактты класс немесе интерфейс ішінде жарияланады. Абстрактты класс немесе интерфейсті жүзеге асыратын ұрпақтар барлық абстрактты әдістер үшін жүзеге асыруды қамтамасыз етуі керек.

Абстрактты әдіс пен интерфейс арасындағы айырмашылық:

Ерекшелік Абстрактты әдіс Интерфейс
Жариялау орны Абстрактты класс, Интерфейс Интерфейс
Жүзеге асыру талаптары Абстрактты класс ұрпағы, интерфейсті жүзеге асыратын класс Интерфейсті жүзеге асыратын класс
Денесі болуы Жоқ Жоқ (Java 8-ге дейін — тек жариялау, Java 8-ден кейін — default және static әдістер денесімен)
Қолжетімділік модификаторлары Public, protected, default (абстрактты класс ішінде); public (интерфейс ішінде) Public

Интерфейс — бұл толықтай абстрактты "келісім", абстрактты әдістердің (Java 8-ге дейін) және константтардың жиынтығы. Класс бірнеше интерфейсті жүзеге асыра алады. Бұл жалпы мінез-құлықты анықтау үшін пайдаланылады, оны әртүрлі класс жүзеге асыра алады, және мінез-құлықтың көптік мұрагерлігін қамтамасыз етеді.

// Абстрактты класс мысалы
abstract class Animal {
    String name;

    // Абстрактты әдіс
    abstract void makeSound();

    // Абстрактты емес әдіс
    void setName(String name) {
        this.name = name;
    }
}

// Абстрактты класс мұрагері класс мысалы
class Dog extends Animal {
    @Override
    void makeSound() { // Абстрактты әдістің жүзеге асырылуы
        System.out.println("Woof");
    }
}

// Интерфейс мысалы
interface Flyable {
    // Абстрактты әдіс (жасырын public abstract)
    void fly();

    // Статикалық әдіс (Java 8)
    static void describeFlying() {
        System.out.println("Ұшу қабілеті.");
    }

    // Default әдіс (Java 8)
    default void land() {
        System.out.println("Қону...");
    }
}

// Интерфейсті жүзеге асыратын және абстрактты класс мұрагері класс мысалы
class Bird extends Animal implements Flyable {
    @Override
    void makeSound() {
        System.out.println("Қыңқылдау");
    }

    @Override
    public void fly() { // Интерфейстен абстрактты әдістің жүзеге асырылуы
        System.out.println("Биікке ұшу!");
    }
}