Çok Bİçİmlİlİk (Polymorphism)
Ç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.
Kalıtım, yöntem geçersizleştirme, dinamik bağlamayla birlikte çok biçimli nesnelerin yukarıya dönüştürülmeseler bile doğru davranmasını sağlar. Dinamik bağlama bir nesnenin üye yöntemi çağırıldığında, çağırılacak doğru yöntemi belirleyen bir yöntem çağırma mekanizmasıdır. Örneğin, önceki şekil sınıflarımızın aşağıdaki UML deki kalıtım diagramına sahip olmaları için küçük bir miktar değiştirildiğini düşünün.
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.