Çok biçimlilik nesneye dayalı dillerin en güçlü özelliklerinden biridir. Çok biçimlilikle programdaki her nesne kendi davranışını değiştirmeden, kalıtım hiyerarşisine göre farklı biçimlerde görülebilir.
Daha önce belirtildiği gibi bir alt sınıfın örneği derleyici tarafından otomatik olarak onun süper sınıflarından birine dönüştürülebilir. Bir nesneyi onun süper sınıfına dönüştürmek yukarıya dönüştürmektir. Farklı alt sınıfların nesnelerini ortak bir süper sınıfa dönüştürmeyle, onları yönetmek için aynı kod kullanılabilir. Daha da önemlisi eğer yeni alt sınıflar yaratırsanız aynı kodu onları yönetmek için de kullanabilirsiniz. Bu programa genişletilebilirlik getirir ve benze nesneler için aynı kodun kullanılması kodu basitleştirir.
Bu kalıtım diagramı
Sekil sınıfının
scale yöntemi
Daire ve
Dikdortgen sınıfları tarafından geçersizleştirilir.
Daire sınıfının bir örneğinin
scale yönteminin çağırılması iki alternatife sahiptir:
Sekilin
scale yöntemi
Dairenin
scale yöntemi.
Daire sınıfının bir örneğinin
scale yöntemi çağırıldığından, derleyici
Dairenin
scale yöntemini çağırır (
Şekilin
scale yöntemini değil).
Daire nesnesinin örneğinin yukarı dönüştürülmesi bu davranışı etkilemez. Bu özelliğin birçok faydası vardır. Örneğin,
Daire ve
Diktortgen sınıflarının örneklerinden bir dizimiz olduğunu düşünelim:
Sekil[] sekiller = new Sekil[3];
sekiller[0] = new Daire();
sekiller[1] = new Diktortgen();
sekiller[2] = new Daire();
Bütün örnekleri ölçeklemek (scale) için aşağıdaki kod yeterli olacaktır:
for(int i=0; i<sekiller.length; i++) sekiller[i].scale(4);
Yukarıdaki örnekte çok biçimliliği kullanarak farklı sınıfların örneklerini ortak bir yerde depoladık ve onların hangi sınıfta yaratıldığını dikkate almadan
scale yöntemini çağırdık.
Bir süre sonra
Sekil sınıfının başka bir alt sınıfını,
Ucgeni, yaratabilir ve yukarıdaki kodu hiç değiştirmeden kullanabilirsiniz.