Java/აბსტრაქტული კლასები
ვინაიდან ჩვენს ზოოპარკში მხოლოდ ორი სახეობაა: ფრინველები და ძუძუმწოვრები; გაუგებარი ხდება თავად Animal კლასის დანიშნულება. ჩვენ არ გვინდა შევქმნათ ისეთი ობიექტი, რომელიც არც ფრინველია და არც ძუძუმწოვარი. ერთ-ერთი გამოსავალია გამოვაცხადოთ Animal კლასი აბსტრაქტულად. ამისათვის კლასის დეკლარაციაში უნდა ჩავამატოთ სიტყვა abstract:
package zoo;
public abstract class Animal {
private String name;
public Animal(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
public abstract boolean laysEgg();
}
ახლა კლასი აბტრაქტულია, public abstract class Animal დეკლარაციის თანახმად, და მისი პირდაპირ შექმნა არ შეიძლება. თუმცა აბსტრაქტულ კლასს დამატებით შეუძლია ქონდეს განუხორციელებული, ანუ აბსტრქტული, მეთოდები. ერთ-ერთი ასეთი მეთოდის მაგალითია გამოცხადება ბოლოს წინა ხაზში:
public abstract boolean laysEgg();
ვინაიდან ზოგადად ცხოველისთვის ჩვენ არ ვიცით არის თუ არა ეს ცხოველი კვერცხის მდებელი, ეს მეთოდი აქ ვერ განხორციელდება. ის უნდა განხორციელდეს არააბსტრქტულ შთამომავალ კლასში. ასე მაგალითად Bird-ში მისი განხორციელება ასე შეიძლება:
@Override
public boolean laysEgg() {
return true;
}
ხოლო Mammal-ში კი ასე:
@Override
public boolean laysEgg() {
return false;
}
რა თქმა უნდა არის რომელიღაც ერთი ავსტრალიური ძუძუმწოვარა ცხოველი, რომელიც დებს კვერცხებს, მაგრამ აქ მისი განხილვის თავი არა გვაქვს.