Warisan
Pertimbangkan mobil dan bus. Mereka adalah dua kendaraan yang berbeda. Tapi tetap saja, mereka berbagi beberapa sifat umum seperti mereka memiliki kemudi, rem, roda gigi, mesin dll.
Jadi dengan konsep warisan, ini dapat direpresentasikan sebagai berikut ...
public class Vehicle {
private Driver driver;
private Seat[] seatArray; //In java and most of the Object Oriented Programming(OOP) languages, square brackets are used to denote arrays(Collections).
//You can define as many properties as you want here ...
}
Sekarang Sepeda ...
public class Bicycle extends Vehicle {
//You define properties which are unique to bicycles here ...
private Pedal pedal;
}
Dan sebuah mobil ...
public class Car extends Vehicle {
private Engine engine;
private Door[] doors;
}
Itu semua tentang Warisan . Kami menggunakannya untuk mengklasifikasikan objek ke bentuk Basis yang lebih sederhana dan anak-anak mereka seperti yang kita lihat di atas.
Kelas Abstrak
Kelas abstrak adalah objek yang tidak lengkap . Untuk memahaminya lebih jauh, mari kita pertimbangkan analogi kendaraan sekali lagi.
Kendaraan dapat dikendarai. Baik? Tetapi kendaraan yang berbeda digerakkan dengan cara yang berbeda ... Misalnya, Anda tidak dapat mengendarai mobil sama seperti Anda mengendarai Sepeda.
Lantas bagaimana cara merepresentasikan fungsi penggerak kendaraan? Lebih sulit untuk memeriksa jenis kendaraan apa itu dan mengendarainya dengan fungsinya sendiri; Anda harus mengubah kelas Driver lagi dan lagi ketika menambahkan jenis kendaraan baru.
Di sinilah peran kelas dan metode abstrak. Anda dapat mendefinisikan metode drive sebagai abstrak untuk memberi tahu bahwa setiap anak yang diwariskan harus mengimplementasikan fungsi ini.
Jadi, jika Anda memodifikasi kelas kendaraan ...
//......Code of Vehicle Class
abstract public void drive();
//.....Code continues
Sepeda dan Mobil juga harus menentukan cara mengendarainya. Jika tidak, kode tidak akan dikompilasi dan kesalahan dilemparkan.
Singkatnya .. kelas abstrak adalah kelas sebagian tidak lengkap dengan beberapa fungsi tidak lengkap, yang harus diwariskan oleh anak-anak warisan mereka sendiri.
Antarmuka
Antarmuka sama sekali tidak lengkap. Mereka tidak memiliki properti apa pun. Mereka hanya menunjukkan bahwa anak-anak yang diwariskan mampu melakukan sesuatu ...
Misalkan Anda memiliki berbagai jenis ponsel dengan Anda. Masing-masing dari mereka memiliki cara berbeda untuk melakukan fungsi yang berbeda; Mis: panggil seseorang. Pembuat telepon menentukan cara melakukannya. Di sini ponsel dapat memanggil nomor - artinya dial-bisa. Mari kita wakili ini sebagai antarmuka.
public interface Dialable {
public void dial(Number n);
}
Di sini pembuat Dialable mendefinisikan cara memanggil nomor. Anda hanya perlu memberikan nomor untuk dial.
// Makers define how exactly dialable work inside.
Dialable PHONE1 = new Dialable() {
public void dial(Number n) {
//Do the phone1's own way to dial a number
}
}
Dialable PHONE2 = new Dialable() {
public void dial(Number n) {
//Do the phone2's own way to dial a number
}
}
//Suppose there is a function written by someone else, which expects a Dialable
......
public static void main(String[] args) {
Dialable myDialable = SomeLibrary.PHONE1;
SomeOtherLibrary.doSomethingUsingADialable(myDialable);
}
.....
Dengan ini menggunakan antarmuka bukan kelas abstrak, penulis fungsi yang menggunakan Dialable tidak perlu khawatir tentang propertinya. Contoh: Apakah memiliki layar sentuh atau papan tombol, Apakah ini telepon darat atau telepon seluler tetap. Anda hanya perlu tahu apakah itu bisa diputar; apakah itu mewarisi (atau mengimplementasikan) antarmuka Dialable.
Dan yang lebih penting , jika suatu hari Anda mengganti Dialable dengan yang lain
......
public static void main(String[] args) {
Dialable myDialable = SomeLibrary.PHONE2; // <-- changed from PHONE1 to PHONE2
SomeOtherLibrary.doSomethingUsingADialable(myDialable);
}
.....
Anda dapat memastikan bahwa kode masih berfungsi dengan baik karena fungsi yang menggunakan dialable tidak (dan tidak bisa) bergantung pada detail selain yang ditentukan dalam antarmuka Dialable. Keduanya mengimplementasikan antarmuka Dialable dan itulah satu-satunya fungsi yang diperhatikan.
Antarmuka biasanya digunakan oleh pengembang untuk memastikan interoperabilitas (digunakan secara bergantian) di antara objek, sejauh mereka berbagi fungsi umum (sama seperti Anda dapat mengubah ke telepon rumah atau ponsel, sejauh Anda hanya perlu menekan nomor). Singkatnya, antarmuka adalah versi kelas abstrak yang jauh lebih sederhana, tanpa properti apa pun.
Juga, perhatikan bahwa Anda dapat mengimplementasikan (mewarisi) sebanyak mungkin antarmuka yang Anda inginkan tetapi Anda hanya dapat memperluas (mewarisi) kelas induk tunggal.
Info Lebih Lanjut
Kelas abstrak vs. Antarmuka