Virtual vs Abstrak
Virtual dan Abstrak adalah dua kata kunci yang digunakan dalam sebagian besar bahasa pemrograman berorientasi objek (OO) seperti Java dan C#. Meskipun ada sedikit perbedaan dalam apa artinya dalam bahasa yang berbeda, kata kunci virtual maupun abstrak memberikan rasa implementasi parsial untuk entitas yang dilampirkannya.
Abstrak
Biasanya, kelas abstrak, juga dikenal sebagai kelas dasar abstrak (ABC), tidak dapat dipakai (instance dari kelas itu tidak dapat dibuat). Jadi, kelas abstrak hanya bermakna jika bahasa pemrograman mendukung warisan (kemampuan untuk membuat subkelas dari memperluas kelas). Kelas abstrak biasanya mewakili konsep atau entitas abstrak dengan implementasi parsial atau tidak. Oleh karena itu, kelas abstrak bertindak sebagai kelas orang tua dari mana kelas anak diturunkan, sehingga kelas anak akan berbagi fitur yang tidak lengkap dari kelas induk dan fungsionalitas dapat ditambahkan untuk menyelesaikannya. Kelas abstrak mungkin berisi metode abstrak. Subkelas Memperluas kelas abstrak dapat mengimplementasikan metode abstrak (warisan) ini. Jika kelas anak mengimplementasikan semua metode abstrak seperti itu, itu adalah kelas konkret. Tetapi jika tidak, kelas anak juga menjadi kelas abstrak. Apa artinya semua ini adalah bahwa, ketika programmer mencalonkan kelas sebagai abstrak, dia mengatakan bahwa kelas akan tidak lengkap dan akan memiliki elemen yang perlu diselesaikan oleh subkelas 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 diwariskan, perlu mengikuti definisi metode dengan tepat (tetapi tentu saja dapat memiliki implementasinya sendiri). Dalam Java dan C#, kelas dan metode abstrak dinyatakan menggunakan kata kunci abstrak.
Maya
Metode/fungsi virtual memberikan kemampuan untuk secara opsional mengganti perilakunya dengan kelas warisan (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 dapat merujuk pada objek kelas dasar atau kelas yang diturunkan. Tapi, perilaku panggilan metode bisa ambigu jika metode kelas dasar ditimpa. Jadi, untuk menyelesaikan ambiguitas ini, kata kunci virtual digunakan. Jika metode ini ditandai virtual, maka fungsi kelas turunan dipanggil (jika ada) atau fungsi kelas dasar disebut. Misalnya, dalam C ++, kata kunci virtual digunakan persis untuk tujuan ini. Di C#, kata kunci virtual digunakan dengan cara yang sama, tetapi di samping itu, override kata kunci harus digunakan untuk memodifikasi semua metode yang ditimpa. Tapi di Java, tidak ada kata kunci virtual yang eksplisit. Semua metode non-statis dianggap virtual. Fungsi virtual tanpa tubuh yang disebut fungsi virtual murni. Dalam Java dan C#, metode abstrak sebenarnya murni virtual.
Perbedaan antara virtual dan abstrak
Meskipun abstrak dan virtual adalah dua kata kunci/konsep yang memberikan makna implementasi yang tidak lengkap untuk entitas yang terkait, mereka memiliki perbedaan. Metode abstrak (yang harus didefinisikan di dalam kelas abstrak) tidak memiliki implementasi sama sekali, sementara metode virtual mungkin memiliki implementasi. Jika metode abstrak diperluas dengan kelas konkret, semua metode abstrak yang diwariskan harus diimplementasikan, sedangkan metode virtual yang diwariskan mungkin atau mungkin tidak diganti.