Anasayfa / Yazılım / C# / Abstract Class – Soyut Sınıf – Özet Sınıf

Abstract Class – Soyut Sınıf – Özet Sınıf

Özet sınıflar ya da özet metotlar abstract anahtar sözcüğü kullanılarak tanımlandırılmaktadırlar. Bir temel sınıf içinde bildirilen abstract metotların içeriği boştur. Kendisinden yeni bir instance alınamayan ama miras veren sınıflarlardır. İçinde abstract metotlar bulunur ama bu metotların içi boştur ve bu metotlar override edilmek zorundadır, aksi halde derleyici hata verir.

Abstract aslında bir yandan da virtual demektir, virtualda override zorunluğu yok iken abstract için bu zorunluluk vardır, aralarındaki fark budur. Eğer bir class içinde abstract metot kullanılacak ise bu classın da abstract olarak bildirilmesi gerekmektedir. Ne amaçla kullanabiliriz? Örneğin, base class içindeki bir metotta iş kurallarını uygulamıyorsak ama o metotun alt sınıflarda mutlaka olması gerekiyor ise ve iş kurallarını türeyen sınıflara bırakmak gerekiyor ise abstract yapmamız gerekir. Örneğin her bankanın para yatırma, para çekme vs gibi işlemleri her işlem içinde farklı farklı özelliklere sahiptir. Bir base class içinde abstract metot oluşturulur ve alt sınıflarda -türeyen sınıflarda- bu metotun ilgili özellikler tanımlanarak işlevi belirtilir. Tabi bu esnada türeyen sınıflarda mu method mutlaka override edilir.

Abstract class içinde normal metotlar olabilir. Instance alınamaz ama referanslar oluşturabilir.

Örneğin Sınıf diye bir class olsun. Bu class’dan şu şekilde instance alınamaz.

Sınıf sınıf1 = new class()

Ama aşağıdaki şekilde referans alınabilir;

Sınıf sınıf1;

Özet metotlar private olarak tanımlanamazlari çünkü private olursa kendisinden türeyecek olan diğer sınıflar bu özet metodu devre dışı bırakamaz.

Bir örnek yapalım :

Görüldüğü gibi absract sınıfından türemiş olan alt sınıflardaki aynı adı taşıyan metotlar override edilmiştir, aksi halde program derlenmez.

  • Abstract classlardan nesne tanımlanamaz, yani instance alınamaz.
  • Abstract sınıflar, abstract metotlar içerebilirler.
  • Abstract metot tanımlanan bir class mutlaka abstract class olarak tanımlanmalıdır.
  • Abstract classlar sealed anahtar sözcüğü ile ifade edilemezler, çünkü sealed ilgili sınıftan türetme yapılmasını engeller.
  • Abstract bir classdan türeyen sınıflar base class içindeki bütün abstract metotları override ederek uygulamak zorundadır, yani metotun gerçek iş yapacak gövdeleri bu derived classlar içinde tanımlanır.
  • Bütün abstract classlar aslında virtualdır.
  • Static metotlar abstract olarak tanımlanamazlar.
  • Abstract metot tanımlamasında override ve virtual sözcükleri kullanılmaz.

3 yorum

  1. Abstract bir classdan türeyen sınıflar base class içindeki bütün abstract metotları override ederek uygulamak zorundadır, yani metotun gerçek iş yapacak gövdeleri bu derived classlar içinde tanımlanır.
    Bu cümleye itirazım var; Çünkü tüm abstract metotlar override edilmek zorunda değildir. Bu durum interface ler için geçerlidir.

  2. Merhabalar İsmail Bey,
    Yazı için çok teşekkürler.
    Abstract class içindeki virtual metod mutlaka override edilmek zorunda mıdır?

  3. Teşekkürler. Güzel bir örnek olmuş.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir