En genel tanımı ile kalıtım, “bir sınıftan yeni sınıflar türetmektir” denebilir.

Türetilen her bir sınıf, türediği sınıfın özelliklerinide devralır.

İşte basit bir örnek. Buradaki tüm sınıfların ortak bir takım özellikleri var. Bir motorlarının olması, tekerleklerinin olması, viteslerinin olması vb. Ama aynı zamanda her ayrı sınıfın kendine has özellikleride var. Örneğin ralli araçları için güvenlik bariyerlerinin olması, pilotlar için kaskların kullanılması gibi. Bu tabloyu inceleyince, her ralli aracı bir otomobildir diyebiliriz. Bu ralli araçlarının otomobil sınıfından türediğini gösterir. Diğer yandan her wrc bir ralli aracıdır da diyebiliriz. Bu ise, wrc araçlarının ralli araçlarının bir takım ortak özelliklerine sahip olduğunu ayrıca otomobillerinde bir takım ortak özelliklerine sahip olduğunu gösterir. İlk aşamada, Ralli, Ticari, Özel ve Spor sınıflarının Otomobil sınıfından türediğini söyleyebiliriz. Bununla birlikte WRC ve GrupN sınıflarıda Otomobil sınıfından türeyen Ralli sınıfından türemiştir. Yani burada şunu söyleyebilmek mümkündür. WRC sınıfı hem Ralli sınıfının hemde Otomobil sınıfının özelliklerine kalıtımsal olarak sahiptir.

Kalıtım senaryolarında, türetmenin yapıldığı en üst sınıflar Temel Sınıf(base class), bu sınıftan türetilen sınıflarda Tureyen Sınıf( derived class) olarak adlandırılıyor.


class Otomobil {

public Otomobil()
{
System.out.println(“Otomobil Sınıfı”);
}
}


class Ralli extends Otomobil {
public Ralli()
{
System.out.println("Ralli Sınıf");
}
}

Türetme işi java programlama dilinde extends anahtar sözcüğü ile yapılıyor.  C# dilinde bu tanımlamayı yapmak için  İki nokta üst üste(:) işareti kullanılıyor.

Bir sınıfın başka bir sınıf içerisinde bir örneği oluşturulup bir değişken olarak kullanılabilir. Bu kullanıma kompozisyon (composition) denilir.

Bir final metod, Temel sınıfta uygulandığında, türetilen sınıflarda iptal edilemeyen metodları belirtir. Temel sınıflarda final olarak tanımlanan metodlar, türeyen sınıflarda override edilemezler. Bu durum değişkenler içinde ayndır. Bu aslında C# dilinde constant değişkenler ile aynıdır.

Final anahtar kelimesini , nesne örneklerinede uygulayabilir ve böylece bu nesnelerin programın çalışması boyunca sadece bir kez yaratılmasını sağlayabilirsiniz. Final olarak oluşturulan bir sınıf örneği bir kere oluşturulabilir.

Final olarak belirtilen sınıfların en önemli özelliği, C# dilindeki sealed anahtar sözcüğünün işlevselliğine sahip olmalarıdır. Yani final olarak tanımlanmış bir sınıftan başka bir sınıfı kalıtımsal olarak türetemeyiz.

Java dilindede C# dilinde olduğu gibi sınıflar arası çoklu kalıtımın desteklenmemektedir. Yani sadece bir tane classtan kalıtım alınabilir. Bunu aşmak için interface(arayüz) kullanılmaktadır.

En önemli kavramlardan bir taneside yapılandırıcıların çalışma sırasıdır. Yapılandırıcılar siz belirtmesenizde otomatik olarak yaratılır. İlk olarak kalıtım en üsünde yer alan otomobil ve daha sonra Ralli sınıfının yapınlandırıcı methodları(constructer) çalışır. Tabiki yıkıcı metotlarda ilk ralli sınıfının ve daha sonra otomobil sınıfının yıkıcı methodları çalışmaktadır.

C# ile kullanılan base anahtar kelime ise burda super ile aynı işlevi görmektedir. Sınıf yapılandırıcısının içinde kullanılan super() kelimesi ile temel sınıfın yapılandırıcı methoduna ulaşım sağlanmaktadır.

 

Şekildeki okun aşağıya doğru inmesinin sebebi, erişim belirleyicileri arasındaki erişilebilirlik sınırlarının durumudur. Public en üst mertebeden bir erişim belirleyicisi olarak her kes tarafında erişilebilirken, en altta yer alan private erişim belirleyicisi en düşük rütbeli erişim belirleyicisidir.

ÜST SINIFLARDA private erişim denetleyicileri ile tanımlanan alanlar ve metotlar alt sınıflarca miras olarak alınmalarına rağmen alt sınıfın metotları tarafından görülemez ve kullanılamazlar; erişilemezler.

Geçersiz Kılma (Overriding)

Alt sınıflar üst sınıfın tüm alan ve metotlarını kalıtım ile alır, fakat istenilirse bu metotların davranışlarını (yaptıkları işleri) değiştirebilir. Bu işleme metotların geçersiz kılınması(overriding) denilir.

Bu işlemi gerçekleştirmek için şunlar yapılır:

  •  Alt sınıf içinde üst sınıfın geçersiz kılınacak metot aynı isim ve parametreler ile yeniden yazılır.
  •  Yazılan metot içeriği değiştirilerek yeni yapması istenilen iş kodlanır.

Sınıfda yazmış olduğumuz bir metodun geçersiz kılınmasını (overriding) engellemek istersek, bu metodu son metot (final method) olarak tanımlarız.