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) - мінез-құлық келісімі |