Java
Yapıcı aşırı yükleme
Aynı sınıfta birden çok yapıcıyı öğrenirsin.
Yapıcı aşırı yükleme
Bir sınıfta birden çok yapıcı tanımlanabilir; buna aşırı yükleme (overloading) denir. Her yapıcının parametre listesi farklı olmalıdır: parametre sayısı, türü veya sırası değişebilir. Hangi yapıcının çağrılacağı parantez içindeki değerlere göre belirlenir.
Örnek: class Rectangle { int w, h; Rectangle() { w = 0; h = 0; } Rectangle(int s) { w = s; h = s; } }. Burada iki yapıcı vardır. new Rectangle() birinciyi, new Rectangle(5) ikinciyi çağırır. Aşırı yükleme, esnek örnek oluşturma sağlar; farklı durumlarda farklı değerlerle örneği hazırlar.
Hangi yapıcı çağrılır?
Java, çağrıdaki parametre sayısına ve türlerine bakarak hangi yapıcının çalışacağına karar verir. Eşleşen tek bir yapıcı varsa onu çağırır. Eşleşen yoksa veya birden çok belirsiz eşleşme varsa derleme hatası verir.
Örnek: new Rectangle() parametresiz yapıcıyı, new Rectangle(5) tek parametreli yapıcıyı çağırır. new Rectangle(5, 3) ise yalnızca iki parametreli bir yapıcı varsa çalışır. Tür dönüştürme de dikkate alınır; new Rectangle(5.0) çağrısı int parametreli yapıcıya uymaz.
Uygulama Rectangle sınıfına iki yapıcı ekle
Rectangle adında bir sınıf tanımla. İçine int w ve int h alanlarını ekle. İki yapıcı yaz: birincisi parametresiz, ikisi de sıfır olsun; ikincisi int s parametresi alsın, w ve h alanlarına s atansın. main içinde her iki yapıcıyı da çağır, w alanlarını ayrı satırlarda yazdır.
Örnek çözümü göster
class Rectangle {
int w;
int h;
Rectangle() {
w = 0;
h = 0;
}
Rectangle(int s) {
w = s;
h = s;
}
public static void main(String[] args) {
Rectangle a = new Rectangle();
Rectangle b = new Rectangle(5);
System.out.println(a.w);
System.out.println(b.w);
}
}
Kendini test et
-
Aşırı yükleme için hangisi doğrudur?
- İki yapıcının parametre listesi aynı olmalı
- Yapıcılar dönüş türü almalı
- Sınıfta tek yapıcı bulunmalı
- İki yapıcının parametre listesi farklı olmalı
Cevabı göster
İki yapıcının parametre listesi farklı olmalı — Aşırı yüklemede her yapıcının parametre listesi farklı olmalıdır.
-
İkinci yapıcıyı tamamla
class Rectangle {
int w, h;
Rectangle() { w = 0; h = 0; }
____(int s) { w = s; h = s; }
}
Cevabı göster
class Rectangle {
int w, h;
Rectangle() { w = 0; h = 0; }
Rectangle(int s) { w = s; h = s; }
}
-
Çağrı ve yapıcı eşle
- new Rectangle()
- Parametresiz yapıcı
- new Rectangle(5)
- Tek parametreli yapıcı
- new Rectangle(5, 3)
- İki parametreli yapıcı
Sıradaki ders: this()