Di Jawa, keduanya terkait erat. Ini karena Java menggunakan teknik untuk pemanggilan metode yang disebut "pengiriman dinamis". Jika saya punya
public class A {
public void draw() { ... }
public void spin() { ... }
}
public class B extends A {
public void draw() { ... }
public void bad() { ... }
}
...
A testObject = new B();
testObject.draw(); // calls B's draw, polymorphic
testObject.spin(); // calls A's spin, inherited by B
testObject.bad(); // compiler error, you are manipulating this as an A
Kemudian kita melihat bahwa B mewarisi spin
dari A. Namun, ketika kita mencoba memanipulasi objek seolah-olah itu tipe A, kita masih mendapatkan perilaku B untuk draw
. Itudraw
perilaku polimorfik.
Dalam beberapa bahasa, polimorfisme dan pewarisan tidak begitu erat hubungannya. Dalam C ++, misalnya, fungsi yang tidak dideklarasikan virtual diwariskan, tetapi tidak akan dikirim secara dinamis, jadi Anda tidak akan mendapatkan perilaku polimorfik itu bahkan ketika Anda menggunakan warisan.
Dalam javascript, setiap panggilan fungsi dikirim secara dinamis dan Anda memiliki ketikan yang lemah. Ini berarti Anda dapat memiliki banyak objek yang tidak terkait, masing-masing dengan miliknya sendiri draw
, memiliki fungsi yang berulang di atasnya dan memanggil fungsi tersebut, dan masing-masing akan berperilaku baik-baik saja. Anda akan memiliki undian polimorfik Anda sendiri tanpa membutuhkan warisan.