Abstract Class (Soyut Sınıflar)
🎯 1. Abstract Nedir?
Section titled “🎯 1. Abstract Nedir?”abstract (soyut) sınıflar, tamamlanmamış (gövdesiz) metotlar içerebilir.
Soyut sınıflar örneklenemez (nesne oluşturulamaz) ve genellikle alt sınıflar için temel yapı sağlar.
💡 Bir sınıfın “ne yapılacağını” değil, “nasıl yapılacağını” alt sınıflara bırakmak için kullanılır.
🔹 2. Sözdizimi
Section titled “🔹 2. Sözdizimi”abstract class Hayvan { abstract void sesCikar(); // soyut metot}🔹 3. Abstract Sınıftan Kalıtım
Section titled “🔹 3. Abstract Sınıftan Kalıtım”Alt sınıf, abstract sınıfı extends eder ve soyut metotları override etmek zorundadır.
abstract class Hayvan { abstract void sesCikar();}
class Kedi extends Hayvan { void sesCikar() { System.out.println("Miyav!"); }}💡
Kedisınıfı,sesCikar()metodunu zorunlu olarak uygulamak zorundadır.
🔹 4. Abstract Sınıfta Normal Metotlar
Section titled “🔹 4. Abstract Sınıfta Normal Metotlar”Abstract sınıflar hem soyut hem de normal metotlara sahip olabilir.
abstract class Arac { abstract void calistir();
void durdur() { System.out.println("Araç durduruldu."); }}
class Araba extends Arac { void calistir() { System.out.println("Araba çalıştı."); }}🔹 5. Nesne Oluşturulamaması
Section titled “🔹 5. Nesne Oluşturulamaması”Hayvan h = new Hayvan(); // ❌ HATA — Soyut sınıflardan nesne oluşturulamaz🔹 6. Abstract ve Constructor
Section titled “🔹 6. Abstract ve Constructor”Soyut sınıfların constructor’ı olabilir, ancak doğrudan çağrılamaz.
Alt sınıflar super() ile bu constructor’a erişebilir.
abstract class Hayvan { Hayvan() { System.out.println("Hayvan oluşturuldu."); }}
class Kedi extends Hayvan { Kedi() { System.out.println("Kedi oluşturuldu."); }}
public class Main { public static void main(String[] args) { new Kedi(); }}Çıktı:
Hayvan oluşturuldu.
Kedi oluşturuldu.
🔹 7. Abstract Metot Kuralları
Section titled “🔹 7. Abstract Metot Kuralları”| Kural | Açıklama |
|---|---|
| Soyut metot gövde içeremez | abstract void sesCikar(); |
| Abstract sınıfta olmalıdır | Normal sınıfta bulunamaz |
| Alt sınıfta override edilmelidir | Zorunlu |
static, final veya private olamaz | Çünkü override edilemez |
🔹 8. Örnek: Şekil Sınıfı
Section titled “🔹 8. Örnek: Şekil Sınıfı”abstract class Sekil { abstract double alanHesapla();
void bilgi() { System.out.println("Bu bir geometrik şekildir."); }}
class Dikdortgen extends Sekil { double genislik, yukseklik;
Dikdortgen(double g, double y) { genislik = g; yukseklik = y; }
double alanHesapla() { return genislik * yukseklik; }}Kullanımı:
Section titled “Kullanımı:”Sekil s = new Dikdortgen(5, 3);System.out.println("Alan: " + s.alanHesapla());🔹 9. Abstract vs Interface
Section titled “🔹 9. Abstract vs Interface”| Özellik | Abstract Class | Interface |
|---|---|---|
| Anahtar kelime | abstract | interface |
| Gövdeli metot | ✅ Olabilir | ✅ (default ile) |
| Çoklu kalıtım | ❌ | ✅ |
| Değişken tipi | Normal veya final | public static final |
| Constructor | ✅ Var | ❌ Yok |
| Amaç | Ortak yapı / temel sınıf | Davranış tanımı |
🔹 10. Abstract Sınıf + Polymorphism
Section titled “🔹 10. Abstract Sınıf + Polymorphism”abstract class Sekil { abstract void ciz();}
class Daire extends Sekil { void ciz() { System.out.println("Daire çiziliyor."); }}
class Ucgen extends Sekil { void ciz() { System.out.println("Üçgen çiziliyor."); }}
public class Main { public static void main(String[] args) { Sekil s1 = new Daire(); Sekil s2 = new Ucgen();
s1.ciz(); s2.ciz(); }}💡 Her alt sınıf, kendi davranışını (override edilen metot) uygular.
🔹 11. Abstract Sınıf ile Final Metot Kullanımı
Section titled “🔹 11. Abstract Sınıf ile Final Metot Kullanımı”Soyut sınıfta bazı metotlar final olabilir. Bu durumda alt sınıflar bu metodu ezemez.
abstract class Hayvan { final void nefesAl() { System.out.println("Hayvan nefes alıyor."); }}🧠 12. Gerçek Hayat Örneği
Section titled “🧠 12. Gerçek Hayat Örneği”abstract class Odeme { abstract void odemeYap(double miktar);}
class NakitOdeme extends Odeme { void odemeYap(double miktar) { System.out.println("Nakit ödeme: " + miktar + " TL"); }}
class KrediKartiOdeme extends Odeme { void odemeYap(double miktar) { System.out.println("Kredi kartıyla ödeme: " + miktar + " TL"); }}
public class Main { public static void main(String[] args) { Odeme o1 = new NakitOdeme(); Odeme o2 = new KrediKartiOdeme();
o1.odemeYap(150.0); o2.odemeYap(300.0); }}🏁 Özet
Section titled “🏁 Özet”| Kavram | Açıklama | Örnek |
|---|---|---|
| abstract class | Soyut sınıf, doğrudan örneklenemez | abstract class Hayvan |
| abstract method | Gövdesiz metot, alt sınıfta ezilmeli | abstract void sesCikar(); |
| extends | Abstract sınıfı kalıtmak için | class Kedi extends Hayvan |
| Polymorphism | Farklı sınıflar, aynı metodu farklı şekilde uygular | Sekil.ciz() |
💡 Not:
abstractsınıflar, interface’lere göre daha fazla esneklik sağlar; hem gövdeli hem soyut metotları destekler.