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) - ქცევის კონტრაქტი |