Virtual vs Abstrak
Virtual dan Abstrak adalah dua kata kunci yang digunakan dalam sebagian besar bahasa pemrograman Object Oriented (OO) seperti Java dan C #. Meskipun ada sedikit perbedaan dalam apa artinya dalam bahasa yang berbeda, kata kunci Virtual dan Abstrak memberikan rasa implementasi parsial untuk entitas yang dilampirkannya..
Abstrak
Biasanya, kelas Abstrak, juga dikenal sebagai Kelas Dasar Abstrak (ABC), tidak dapat dipakai (contoh dari kelas itu tidak dapat dibuat). Jadi, kelas abstrak hanya bermakna untuk dimiliki jika bahasa pemrograman mendukung pewarisan (kemampuan untuk membuat subclass dari perluasan kelas). Kelas abstrak biasanya mewakili konsep atau entitas abstrak dengan implementasi parsial atau tanpa implementasi. Oleh karena itu, kelas Abstrak bertindak sebagai kelas induk dari mana kelas anak diturunkan, sehingga kelas anak akan berbagi fitur yang tidak lengkap dari kelas induk dan fungsionalitas dapat ditambahkan untuk melengkapi mereka. Kelas abstrak dapat berisi metode abstrak. Subkelas yang memperluas kelas abstrak dapat mengimplementasikan metode-metode abstrak (yang diwarisi) ini. Jika kelas anak mengimplementasikan semua metode abstrak tersebut, itu adalah kelas yang konkret. Tetapi jika tidak, kelas anak juga menjadi kelas abstrak. Apa artinya semua ini adalah bahwa, ketika programmer mencalonkan sebuah kelas sebagai Abstrak, ia mengatakan bahwa kelas tersebut tidak lengkap dan akan memiliki elemen yang perlu diselesaikan oleh subclass yang mewarisi. Ini adalah cara yang bagus untuk membuat kontrak antara dua programmer, yang menyederhanakan tugas dalam pengembangan perangkat lunak. Programmer, yang menulis kode untuk diwarisi, harus mengikuti definisi metode dengan tepat (tetapi tentu saja dapat memiliki implementasinya sendiri). Dalam Java dan C #, kelas dan metode Abstrak dideklarasikan menggunakan kata kunci Abstrak.
Virtual
Metode / fungsi virtual memberikan kemampuan untuk secara opsional menimpa perilakunya oleh kelas pewarisan (menggunakan fungsi dengan tanda tangan yang sama). Konsep fungsi Virtual penting dalam skenario berikut. Misalkan kelas diturunkan oleh kelas anak, maka setiap kali objek dari kelas turunan digunakan, itu bisa merujuk ke objek dari kelas dasar atau kelas turunan. Tapi, perilaku metode panggilan bisa ambigu jika metode kelas dasar ditimpa. Jadi, untuk mengatasi ambiguitas ini, kata kunci Virtual digunakan. Jika metode ini ditandai Virtual, maka fungsi kelas turunan disebut (jika ada) atau fungsi kelas dasar disebut. Misalnya, dalam C ++, kata kunci virtual digunakan tepat untuk tujuan ini. Dalam C #, kata kunci Virtual digunakan dengan cara yang serupa, tetapi di samping itu, kata kunci pengganti harus digunakan untuk memodifikasi semua metode yang diganti. Tetapi di Jawa, tidak ada kata kunci Virtual eksplisit. Semua metode non-statis dianggap Virtual. Fungsi virtual tanpa badan disebut fungsi Virtual Murni. Dalam Java dan C #, metode abstrak sebenarnya adalah Virtual Murni.
Perbedaan antara Virtual dan Abstrak
Meskipun Abstrak dan Virtual adalah dua kata kunci / konsep yang memberikan makna implementasi yang tidak lengkap untuk entitas terkait, mereka memiliki perbedaan. Metode abstrak (yang harus didefinisikan dalam kelas Abstrak) tidak memiliki implementasi sama sekali, sedangkan metode Virtual mungkin memiliki implementasi. Jika metode abstrak diperpanjang oleh kelas konkret, semua metode abstrak yang diwariskan harus diimplementasikan, sementara metode virtual yang diwarisi mungkin atau mungkin tidak ditimpa.