Abstract Class Nedir?
Bazı durumlarda, bazı sınıf veya sınıfların, ortak metot veya değişkenlerine sahip bir üst sınıf tanımlarken, bu üst sınıftan bir nesne tanımlamak istemeyebiliriz. Kendisinden bir nesne oluşturmayacağımız, bir başka ifadeyle somut bir yapı ortaya çıkarmayacağımız bu sınıfa da soyut sınıf(abstract class) deriz.
Soyut Sınıf Kuralları
- Sınıf bildiriminde abstract nitelemesi yapılır.
Soyut sınıf tanımlarken class ifadesinden önce abstract ifadesi getirilir.
2. Soyut sınıflarda metotların gövdesi olmaz.
Metot gövdesi ya da metot bloku dediğimiz { } parantezlerinin olmaması; yani metot tanımlarının olmamasıdır.
3. Soyut metotların bulunması şart değildir.
Sınıf içerisinde soyut metotlar olması gerekmez zaten abstract ifadesi alan her sınıf soyuttur.
4. Nesne yaratılamaz.
Soyut sınıflardan nesne yaratılamaz.
5. Alt sınıfları tanımlamada “extends” anahtarı kullanılır.
Soyut sınıfta kullanılan ortak özellikleri bir araya getirmek için ve bu sınıfı genişleten alt sınıfları tanımlamada, kalıtım ile bu özellikleri aktarmak için “extends” anahtarını kullanırız.
6. Soyut sınıfın; soyut ve somut sınıfları olabilir.
Aşağıdaki kod parçasını inceleyelim.
Ev dediğimizde tek tip veya sabit bir yapı gözümüzde canlanmaz ve ayrım yapılamaz. Ancak Daire, Dubleks, Tripleks, Villa vb. çeşitlere ayırarak yorum yapabiliriz.
Biz Ev sınıfını da Daire, Dubleks vs. sınıfların ortak özelliklerini toplamak için tanımlayabiliriz. Ev sınıfı genel olarak ortak özelliklere sahiptir ve soyut tanımlandığı için ondan bir nesne oluşturamayız. Tanımlamaya çalışırsak da hata verecektir. (Ancak ileride referans olarak kullanılabileceğini göreceğiz).
Şimdi, Ev sınıfının alt sınıfı olan Villa isminde bir sınıf tanımlayalım. Bu sınıfın ek olarak havuzVarMi isminde bir boolean değişkeni daha olsun.
Sınıf tanımında «The type Villa must implement the inherited abstract method Ev.fiyatHesapla()» hata mesajıyla karşılaşırız. Bu mesaj bize Ev sınıfının miras alınan Villa.fiyatHesapla() soyut metodunu uygulaması gerektiğini belirtmektedir.
Villa Sınıfı
Aynı örnekte başka bir alt sınıf olan Daire sınıfı tanımlayalım. Yine, Override ile fiyatHesapla()metodunu bu sınıf içinde tanımlayalım.
Daire Sınıfı
Başka Bir Örnek
Cihaz Sınıfı
Kamera Sınıfı
Main Sınıfı
Sonuç olarak baslat() ve kapat() metotları, Kamera sınıfında tanımlandığı gibi çalışacaktır. modelBilgi() metodu ise Override işlemi yapılmadığı için, bir üst sınıfına bakılacak ve Cihaz sınıfında tanımlandığı gibi çalışacaktır.