შინაარსზე გადასვლა

Java/ინტერფეისი

ვიკიწიგნებიდან

ჩვენ ბედნიერები ვართ იმითი რომ აქამდე ასე წარმატებულად მოვახდინეთ ცხოველების კლასიფიკაცია. მაგრამ ჩვენი სიხარული, როგორც ნებისმიერი პროგრამისტის სიხარული, დიდხანს ვერ გასტანს. რადგან თქვენ გაიგეთ, რომ თურმე ცხოველები იყოფა კიდევ ორ ქვეჯფუგად:

  • რომლებიც ჭამენ ბალახს
  • რომლებეივ ჭამენ ხორცს

და ყველაზე ცუდი ისაა რომ ეს ახალი კლასიფიკაცია იკვეთება ჩვენს კლასიფიკაციასთან ძუძუმწოვრების და ფრინველების. როგორც ერთ ასევე მეორე ჯგუფში შეიძლება იყოს ბალახის და ხორცის მჭამელები. კიდევ უფრო უარესი ისაა, რომ ზოოპარკის დირექტორი იჩემებს, რომ დათვს შეუძლია ჭამოს როგორც ბალახი, ასევე ხორცი.

აქ თითქოს სანერვიულო არაფერია: გააკეთებ ახალ კლასებს და შემდეგ გამოიყვან მათგან შთამომავლობას. თუმცა საქმე ისაა რომ Java-ში კლასი შეიძლება იყოს მხოლოდ ერთი კლასის შთამომავალი. ამიტომ ჩვენ ვერ შევქმნით ძროხას როგორც შთამომავალს ძუძუმწოვრისგან და ბალახისმჭამელისგან.

როგორ უნდა მოვიქცეთ?

აქ გვეხმარება ინტერფეისები. კლასი შეიძლება იყოს ნაწარმოები მრავალი ინტერფეისისგან. ინტერფეისი წააგავს აბსტრაქტულ კლასს, მაგრამ განსხვავდება იმითი, რომ მას ყველა მეთოდი განუსაზღვრელი აქვს.

შევქმნათ ბალახისმჭამელთა ინტერფეისი:

package zoo;

public interface GrassEaters {
    boolean needGreenGrass();
}

ინტერფაისი ცხადდება interface ბრძანებით. რადგან მასში ყველა მეთოდი ისედაც აბსტრაქტულია abstract სიტყვის წერა არაა აუცილებელი. ჩვენ აქ ერთადერთი მეთოდი განვსაზღვრეთ: ჭამს თუ არა მხოლოდ მწვანე ბალახს?

ახლა დავწეროთ ხორცის მჭამელთა ინტერფეისი:

package zoo;

public interface MeatEaters {
    boolean canEatCarrion();
}

აქაც მხოლოდ ერთი განუსაზღვრელი მეთოდია: ჭამს თუ არა ლეშს?