# Kalıtım (programlama)
Kalıtım (), bir sınıfın üst sınıftan miras almasına denir. Pratikte karışıklıklara sebep olduğundan kimi programlama dilleri, ancak tekli kalıtıma izin verirler (Java gibi). Bu dillerde çoklu kalıtım yerine interface denilen nesnelerden faydalanılarak çoklu kalıtımın verdiği özellikler, yan etkileri olmaksızın kullanılabilmektedir.
Çoklu kalıtıma izin veren programlama dillerindeyse doğrudan bir sınıfın birden fazla sınıftan miras alması mümkündür. (C++ ve C# gibi dillerde olduğu gibi).


## Tarihçe.
1996'da Tony Hoare bileşikler üzerine birkaç görüş ortaya koydu ve özellikle de bileşik alt sınıflarına dair fikrini meydana attı. Bunları ortak nicelikleri olan fakat bir değişke etiketi ile ayırt edilen ve değişkelere özel nicelikler de içeren birer bileşik olarak tanımladı. Bundan esinlenerek, 1967'da Ole-Johan Dahl ve Kristen Nygaard farklı sınıflara mensup fakat farklı niceliklere sahip nesneler tanımlamaya yol açan bir tasarım ortaya koydu. Ortak nicelikler bir üst sınıfta toplanmakta ve üst sınıflar ise kendileri birer üst sınıfa mensup olabilmekteydi. Bu halde, bir alt sınıfın değerleri farklı üst sınıflara ait herhangi bir sayıda ön kısım ve alt sınıfa ait bir ana kısım içeren birer bileşik nesneydi. Bu kısımlar birleştirilmekteydi. Bir bileşik nesnenin nicelikleri nokta gösterimi ile erişilirdi. Bu fikir ilk Simula 67 programlama dilinde uygulanmıştı. Fikir sonrasında Smalltalk, C++, Java, Python ve başka birçok dile yayıldı.


## Çeşitler.
Paradigma ve dile göre farklı kalıtım çeşitleri bulunmaktadır.
 - Tekli kalıtım 
Alt sınıflar tek bir üst sınıfın özelliklerini miras alır. Bir sınıf başka bir sınıfın özelliklerine sahip olur.
 - Çoklu kalıtım
Tek bir sınıf birden fazla üst sınıfa sahip olabilip tüm üst sınıflarından özellik miras alır. 
 Çoklu kalıtımı verimli bir şekilde programlaması çok zor olarak görülüyordu. Mesela, Objective-C üzerine kitabında, Brad Cox gerçekten C++'a çoklu kalıtım eklemenin imkansız olduğunu öne sürdü. 1982 kadar erken bir vakitte çoklu kalıtımı düşünüp 1984'te basit ve verimli bir programlama tekniği bulduğum için bu zorluğu üstüme aldım. Zannediyorum ki bu modanın olay örgüsünü değiştirdiği tek durum.
— Bjarne Stroustrup
 - Çok seviyeli kalıtım
Alt sınıflar başka bir alt sınıfa/alt sınıflara mensup olabilir. "Çok seviyeli kalıtım" şeklinde gösterildiği halde bu durum epey yaygındır.
"A" sınıfı "B" "türetilmiş sınıfı" için bir "taban sınıfı" görevi görür, ki o da "C" türetilmiş sınıfı için bir taban sınıfı görevi görür. "B" sınıfı bu durumda "A" ve "C" arasındaki kalıtım için bir aracı olduğundan dolayı "ortanca" taban sınıfı olarak bilinir. "ABC" zinciri "kalıtım yolu" olarak bilinir.
Çok seviyeli kalıtım ile türetilmiş sınıflar aşağıdaki gibi tanımlanır:
// C++ dilinde emplementasyon
class A { /* ... */ }; // Taban sınıfı
class B : public A { /* ... */ }; // A'dan türetilmiş B
class C : public B { /* ... */ }; // B'den türetilmiş C
Bu işlem herhangi bir seviye derinliğine sürdürülebilir.
 - Hiyerarşik kalıtım
Bu durumda tek bir sınıf birden fazla sınıfa üst sınıflık eder. Mesela, bir üst sınıf, "A", "B" ve "C" olmak üzere iki alt sınıfa sahip olabilir. Hem "B" hem de "C"&apos;nin üst sınıfı "A" olsa da "B" ve "C" farklı birer sınıftır.
 - Karma kalıtım
Karma kalıtım, yukarıdaki çeşitlerden iki ya da ikiden fazlası gerçekleşmesidir. Bunun bir örneği bir "A" sınıfının iki "C" ve "D" olmak üzere iki alt sınıfa sahip bir "B" alt sınıfına sahip olmasıdır. Bu, çok seviyeli ve hiyerarşik kalıtımın bir karışımıdır.