Java Constructor (Yapıcı Metot) Nedir? super() ve this() Kullanımı

İngilizce'ye Geç
Kısa Özet: Java Constructor Nedir?

Java'da Constructor (Yapıcı Metot), bir sınıftan (class) new anahtar kelimesi ile yeni bir nesne (object) oluşturulduğu anda bellekte otomatik olarak çalışan özel bir bloktur. Temel amacı, yaratılan nesnenin ilk değişken atamalarını (başlangıç durumunu) yapmaktır. Bir constructor, bulunduğu sınıf ile birebir aynı isme sahip olmalı ve kesinlikle hiçbir dönüş tipi (void dahil) içermemelidir.

Nesne Yönelimli Programlamanın (OOP) kalbinde nesneler yatar. Ancak bu nesnelerin bellekte sorunsuz bir şekilde ayağa kalkması ve ilk özelliklerini alması gerekir. Bu yazıda Java constructor kavramını detaylı şekilde inceleyeceğiz. Yapıcı metot nedir, normal metotlardan farkı nedir, super() ve this() komutları nesne inşasında nasıl rol alır gibi en çok sorulan sorulara adım adım örneklerle yanıt vereceğiz.

İlgili İçerik: Constructor içerisinde super() komutunun neden kullanıldığını mantıksal olarak kavramak için öncelikle sınıflar arası ebeveyn-çocuk ilişkisini bilmeniz gerekir. Bunun için Java Inheritance (Kalıtım) Nedir? rehberimize mutlaka göz atmalısınız.

1. Java Constructor Nedir?

Java’da constructor, bir sınıftan nesne oluşturulurken (new SınıfAdı() çağrıldığında) çalışan ilk ve özel kod bloğudur. Her yeni nesne üretildiğinde constructor otomatik olarak tetiklenir.

Basit Constructor Örneği

class Kitap {
    // Bu bir Constructor'dır (Sınıf adıyla aynı, dönüş tipi yok)
    public Kitap() {
        System.out.println("Kitap nesnesi bellekte oluşturuldu!");
    }

    // Bu normal bir metottur
    public void romanOku() {
        System.out.println("Kitap okunuyor...");
    }
}

2. Constructor ile Metot Arasındaki Farklar Nelerdir?

Görünüşte metotlara benzeseler de yapısal olarak çok keskin farkları vardır:

  • Dönüş Tipi: Constructor’ların dönüş tipi olmaz, void dahi yazılamaz. Eğer yazılırsa Java onu sıradan bir metot olarak kabul eder.
  • İsimlendirme: Sınıf adıyla (büyük/küçük harf duyarlı) birebir aynı isme sahip olmak zorundadır.
  • Nitelikler: static, final veya abstract olarak işaretlenemezler. Sadece erişim belirleyicileri (public, private vb.) alabilirler.
  • Çağrılma: Metotları geliştirici manuel çağırırken, constructor sadece nesne yaratılırken sistem tarafından (JVM) bir kez çağrılır.

Legal (Geçerli) ve Illegal (Geçersiz) Örnekler

class Kitap2 {
    // Geçerli constructor'lar
    Kitap2() { }
    private Kitap2(byte b) { }
    Kitap2(int x, int... y) { }

    // GEÇERSİZ ÖRNEKLER (Derleme veya Mantık Hatası)
    void Kitap2() { }         // Başına void geldiği için artık bir METOT oldu!
    Kitap() { }               // Sınıf adıyla eşleşmiyor (Hatalı isim)
    static Kitap2(float f) { } // Constructor static OLAMAZ
    final Kitap2(long x) { }  // Constructor final OLAMAZ
}

3. Default Constructor (Varsayılan Yapıcı) Nedir?

Eğer siz kodunuzda hiçbir constructor tanımlamazsanız, Java derleyicisi (Compiler) nesnenin ayağa kalkabilmesi için arka planda otomatik olarak içi boş bir default constructor ekler.

  • Tamamen parametresizdir.
  • Sınıfınızla aynı erişim belirtecine (public/default) sahiptir.
  • Arka planda gizlice bir super() çağrısı içerir.

Not: Sınıfa kendiniz en ufak bir constructor eklerseniz (ister parametreli ister parametresiz), Java bu varsayılan yapıcıyı eklemeyi anında bırakır.

4. Parametreli Constructor Nedir?

Nesnenin başlangıç değerlerini dışarıdan almak için kullanılır. Bu, nesnenin her oluşturulduğunda farklı özelliklerle (Örn: farklı bir öğrenci adı) doğmasını sağlar.

class Ogrenci {
    String ad;

    // Parametreli Constructor
    Ogrenci(String ad) {
        this.ad = ad; // Dışarıdan gelen 'ad' sınıfın değişkenine atanır
    }
}

// Kullanımı:
Ogrenci ogr = new Ogrenci("Ahmet");

5. Kalıtımda super() Kullanımı

Eğer bir sınıf, başka bir sınıfı miras alıyorsa (extends), alt sınıfın constructor’ı, üst sınıfın constructor’ını çağırmak zorundadır. Bunu super() komutuyla yapar. Kritik kural: super() daima constructor'ın ilk satırında yazılmalıdır!

class Arac {
    // Üst sınıfta sadece parametreli constructor var
    Arac(String ad) {
        System.out.println("Üretilen araç: " + ad);
    }
}

class Otomobil extends Arac {
    Otomobil() {
        // Üst sınıf parametre beklediği için super("...") yazmak ZORUNLUDUR!
        super("Spor Otomobil"); 
    }
}

6. Aynı Sınıfta this() Kullanımı

Bazen bir constructor içinden, kendi sınıfınızdaki başka bir constructor'ı çağırmak isteyebilirsiniz. Bunun için this() komutu kullanılır ve tıpkı super() gibi bloğun ilk satırında yer almak zorundadır. Kod tekrarını önler.

class Kitap {
    String ad;
    int sayfa;

    // 1. Parametresiz Constructor
    Kitap() {
        this("Bilinmiyor", 0); // Parametreli constructor'ı çağırır
    }

    // 2. Parametreli Constructor
    Kitap(String ad, int sayfa) {
        this.ad = ad;
        this.sayfa = sayfa;
    }
}

7. Constructor Overloading (Aşırı Yükleme)

Java’da normal metotlar gibi constructor’lar da overload edilebilir. Yani aynı sınıfta farklı parametre listelerine (sayı veya tür olarak) sahip birden fazla constructor tanımlayabilirsiniz.

class Kullanici {
    Kullanici() { } // Sadece nesne üretir
    Kullanici(String ad) { } // İsimle üretir
    Kullanici(String ad, int yas) { } // İsim ve yaşla üretir
}

Not: Metot aşırı yükleme kuralları hakkında daha detaylı bilgi için Java Overloading ve Overriding Farkı yazımızı okuyabilirsiniz.

8. Sık Sorulan Sorular (SSS)

Constructor dönüş tipi neden yoktur?

Çünkü constructor'ın tek amacı, nesnenin bellekteki adresini hazırlayıp başlangıç atamalarını yapmaktır. Zaten dolaylı olarak sınıfın kendi örneğini (instance) oluşturduğu için ekstra bir dönüş tipine (int, String vb.) ihtiyaç duymaz.

super() ile this() aynı constructor içinde kullanılabilir mi?

Hayır, kullanılamaz. Hem super() hem de this() komutu, derleyici kuralı gereği mutlaka constructor'ın ilk geçerli satırı olmak zorundadır. İkisi aynı anda ilk satırda olamayacağı için birlikte kullanılamazlar.

Default constructor neden kaybolur?

Eğer geliştirici olarak siz sınıfa Kullanici(String ad) gibi özel bir yapıcı metot yazarsanız, Java artık "Demek ki bu sınıfın özel bir üretim kuralı var" diyerek sizin yerinize otomatik parametresiz yapıcısını (default) üretmeyi bırakır.

Sonuç

Java Constructor (Yapıcı Metot) konusu, Nesne Yönelimli Programlamanın temel taşlarından biridir. Constructor mantığını, super() ve this() zincirlerini doğru anlamak; ileride Spring Boot gibi framework'lerde Constructor Injection (Bağımlılık Enjeksiyonu) kullanırken kod mimarinizi profesyonelce kurgulamanızı sağlayacaktır.

Etiketler: java constructor, java yapıcı metot, default constructor, java super this, java oop

Son Güncelleme: 2026

Latest Software Developers - Yazılım Blog Yazarı Profil Resmi

Yazar

LatestSoftwareDevelopers

Güncel yazılım teknolojilerinin takip edildiği blog.

Java ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *