IS-A dan HAS-A
Ketika suatu kelas diturunkan dari kelas lain maka kita menyebutnya subclass extends superclass. Nah bagaimana kita menentukan suatu kelas adalah turunan dari kelas yang lain ? Testlah terlebih dahulu dengan IS-A
Segitiga IS-A Shape. Apakah segitiga itu bentuk ? . ya .. benar. Jadi kita dapat menextends Segitiga dari Shape.
Cat IS-A Feline. Apakah kucing merupakan family kucing. Yaps benar. Sangat benar pun malah.
Surgeon IS-A Doctor. Apakah Ahli bedah itu merupakan dokter. Yups.
Nah sekarang kita akan berlatih …
Apakah Oven extends Kitchen (dapur) ? jadi kita ubah dulu bentuknya ke dalam bahasa manusia. Hehe. Apakah Oven adalah dapur ? Wow.. Tentu saja tidak. Jadi salah kalau misalnya kita menextends oven dari kitchen.
Tapi keduanya memiliki hubungan bukn ?? Oven emang berelasi dengan kitchen tapi bukan dengan inheritance. Keduanya berhubungan melalui HAS-A. Jadi lebih masuk akal apabila kita mengatakan Kitchen HAS-A Oven. Maksudnya dalam code. Brarti Kelas Kitchen akan memiliki instance variable dengan tipe Oven.
public class Oven { ... public void On() { ... } } public class Kitchen { Oven oven; // anggaplah ini smart kitchen . jadi semua serba otomatis public void MakeCookie() { oven.On(); ... } ... }
IS-A relationship berlaku pada keseluruhan inheritance tree. Jika kelas B extends kelas A, Class B IS-A Class A. Dan jika kelas C extends kelas B maka. Class C akan lulus test IS-A untuk kelas B dan kelas A.
Jadi kita tau bahwa inheritance kita itu benar dengan test IS-A. IS-A relationship hanya berlaku satu arah. Jadi jika kita bilang bahwa Triangle IS-A Shape. Tapi tidak berlaku untuk kebalikannya. Shape is Triangle. Belum tentu kan ??
jadi bagaimana dengan Guitar extends Instrument ?