Yükleniyor...

Java'da aşırı yükleme

Bir sınıfa ikisi de paint adını kullanan iki metot koyun. Bir başlık static void paint(String word). Diğeri static void paint(int n). Gövdeler kısa: ilki word yazdırır, ikincisi n yazdırır. main içinden paint("ok"); sonra paint(3); çağırın. Ekran iki satır göstermelidir: önce ok, sonra 3. Java ikinci paint'i çakışma saymaz. Parametre listeleri farklı olduğu için iki başlığı ayrı metotlar olarak görür. Farklı listelerle paylaşılan bu ad, bu sayfanın öğrettiği şeydir.

Aynı ad, farklı listeler

Şimdiye kadar her yeni fikir taze bir metot adı kullandı: ring, greet, twice. Burada ad bilerek paint kalır. Değişen şey parantezlerin arasındakidir. Bir liste bir String tutar. Diğeri bir int tutar. Derleyici ikisini de tutar çünkü bu listeler aynı değildir.
Sign.java adlı küçük bir program dosyası oluşturun. İlk satırdaki public class dosya adıyla uyuşmalıdır: public class Sign. Bu dosyada eski bir Box veya Tip sınıf adı bırakmayın; derleyici sınıf adı ile dosya adının uyuşmasını bekler.
main dışında, hâlâ sınıf süslü parantezlerinin içinde, her iki paint başlığını yazın. Bu sayfada void kalsın: her gövde yazdırır ve return ile main'e bir şeyin dönmesi gerekmez. İlk gövde System.out.println(word); kullanır. İkinci gövde System.out.println(n); kullanır. Derlemeden önce dosyayı kaydedin. İlk tam program sonraki kutudadır.

İki paint metodu olan Sign.java

Bu, önce derlediğiniz sürümdür. main iki çağrı tutar. Sınıf aynı adı paylaşan iki paint metodu tutar.

paint String and paint int

java
public class Sign {
    public static void main(String[] args) {
        paint("ok");
        paint(3);
    }

    static void paint(String word) {
        System.out.println(word);
    }

    static void paint(int n) {
        System.out.println(n);
    }
}

Sign.java'nın bulunduğu klasörden javac Sign.java çalıştırın. Parantezler, süslü parantezler ve noktalı virgüller uyuşunca javac kendi satırını yazmaz. Sonra java Sign çalıştırın — java Sign.java değil. İkinci komuttan .java sonunu çıkarın. Aynı iki komut Windows ve macOS'ta çalışır. Program iki satır yazdırıp durmalıdır: ok sonra 3. Sizden yazmanızı istememelidir. Terminal klavye girişi bekliyorsa, eski bir alıştırmadan kalan nextLine çağrısı hâlâ dosyadadır. Onu silin ve yukarıdaki iki paint çağrısı ile iki paint metodunu tutun.
Çalışmayı bir kez sırayla izleyin. Java main'den başlar. İlk çağrı paint("ok")'dir. Argüman bir String'dir, bu yüzden Java String word alan gövdeyi çalıştırır ve ok yazdırır. İkinci çağrı paint(3)'tür. Argüman bir int'tir, bu yüzden Java int n alan gövdeyi çalıştırır ve 3 yazdırır. paint adı her iki seferde de aynıdır. Parantez içindeki liste gövdeyi seçer.
Her iki satır ok gösteriyorsa belki yalnızca String metodunu bıraktınız ve her çağrıda sabit bir sözcük yazdırdınız. Her ikisi 3 gösteriyorsa belki yalnızca int metodunu bıraktınız. Her iki başlığı tutun. javac paint'in zaten tanımlı olduğunu söylüyorsa, her iki başlığın aynı listeye sahip olup olmadığına bakın — örneğin paint(String word)'ün iki kopyası. Aşırı yükleme listede gerçek bir fark ister; yalnızca farklı parametre adıyla aynı başlığın ikinci kopyasını istemez.

İki sözcüklü ikinci bir liste

Parametre sayısı da farklı olabilir. İki String değeri alan ve bunları bir boşlukla tek satırda yazdıran üçüncü bir aşırı yükleme ekleyin. İlk iki paint metodunu yerinde bırakın. Yeni biçimi main'den önceki çağrılardan sonra çağırın ya da öğrenirken yalnızca bu biçime odaklanan taze bir main başlatın.

paint two Strings

java
public class Sign {
    public static void main(String[] args) {
        paint("hi", "sam");
    }

    static void paint(String a, String b) {
        System.out.println(a + " " + b);
    }
}

Kaydettikten sonra yeniden derleyip çalıştırın: javac Sign.java, sonra java Sign. Ekran bir satır göstermelidir: hi sam. Çağrının iki argümanı vardır. Metodun iki parametresi vardır. Bu eşleşme Java'nın bu gövdeyi seçmesi için yeterlidir. Aynı sınıfta hâlâ önceki paint(String word) ve paint(int n) varsa tutabilirsiniz. İki String değerli bir çağrı, sayılar farklı olduğu için tek argümanlı String metodunu seçmez.
Alıştırma için üç aşırı yüklemeyi bir dosyaya koyduğunuzda main her biçimi kendi satırında çağırabilir. Tek String'li bir çağrı yine paint(String word)'e gider. Tek int'li bir çağrı yine paint(int n)'e gider. İki String'li bir çağrı paint(String a, String b)'ye gider. Ortak ad bu ayrımları silmez.

String listesinin yanında boş liste

Boş parantezli bir metot da farklı bir listedir. Parametresiz paint()'i paint(String word)'ün yanında tutabilirsiniz. Boş çağrı paint(); boş liste gövdesini çalıştırır. paint("go"); çağrısı String gövdesini çalıştırır.

paint empty and paint String

java
public class Sign {
    public static void main(String[] args) {
        paint();
        paint("go");
    }

    static void paint() {
        System.out.println("ready");
    }

    static void paint(String word) {
        System.out.println(word);
    }
}

javac Sign.java ve java Sign sonrası ekran ilk satırda ready, ikinci satırda go göstermelidir. İlk çağrının parantezleri arasında bir şey yoktur, bu yüzden paint() ile eşleşir. İkinci çağrı bir String gönderir, bu yüzden paint(String word) ile eşleşir. Birini paintReady diye yeniden adlandırmak da derlenir ama o başka bir beceridir. Bu sayfa paint adını tutar ve farkı listelerin taşımasına bırakır.

Hangi çağrı hangi başlığı çalıştırır

Çağrıları başlıkların yanında okuyun. Çağrıdaki argüman listesi başlıktaki parametre listesine uymalıdır. Bu başlangıç şeklinde hem tür hem sayı önemlidir.

📊 call beside matching paint

main içindeki çağrı Çalışan başlık Ekran satırı
paint("ok"); paint(String word) ok
paint(3); paint(int n) 3
paint("hi", "sam"); paint(String a, String b) hi sam
paint(); paint() ready

Sık yapılan bir karışıklık, ikisi de paint(String word) diyen iki metot yazıp ikincisinin aşırı yükleme sayılmasını beklemektir. Parametre adını yalnızca paint(String label) yapmak derleyici için yeni bir liste oluşturmaz. Burada tür ve sayı önemlidir. Başka bir karışıklık, hiç boolean parametre listesi yazmadığınız halde paint(true) çağırmaktır. O zaman javac eşleşen bir paint bulamaz. İstediğiniz türü alan bir başlık ekleyin veya çağrıyı zaten desteklediğiniz bir türe değiştirin.
main içinde System.out.println("paint"); yazmak paint sözcüğünü yazdırır. Hiçbir metodu çağırmaz. String alan aşırı yüklemeyi istediğinizde paint("ok"); tutun. Eski bir Box dosyasından kalan twice metodu Sign.java içinde kalırsa ve main hâlâ twice(7) yazdırıyorsa ekran karışabilir. main'i test ettiğiniz paint çağrılarına indirin ve o çalıştırma için yalnızca gereken paint aşırı yüklemelerini tutun.
Bir paint metodunu main'in süslü parantezlerinin içine gömmeyin. Metotlar sınıfın içinde, main'in yanındadır. İki aşırı yükleme, aynı sınıf gövdesinde iki kardeş metottur.

scope'tan önce

Aynı sınıfta bir metot adı ve birkaç parametre listesi tutabilirsiniz. Java gövdeyi çağrının argüman listesinden seçer. Ekran eşleşen gövdenin satırını gösterir. Aynı listeye sahip iki başlık aşırı yükleme değildir. Sonraki sayfa scope'tur; orada hangi adların metot içinde göründüğünü, hangilerinin dışarıda kaldığını görürsünüz.

🧠 Bilginizi Test Edin

Başlamaya Hazır

Bilginizi Test Edin

Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör

❓
5
Sorular
🎯
70%
Geçmek İçin
♾️
∞
Süre
🔄
∞
Deneme

📝 Talimatlar

  • Her soruyu dikkatle okuyun
  • Her soru için en iyi cevabı seçin
  • Quiz'i istediğiniz kadar tekrar alabilirsiniz
  • İlerlemeniz üstte gösterilecek