Menu
Coddy logo textTech

Metot Aşırı Yükleme Temelleri

Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 28 / 87.

Polimorfizm “çok biçimlilik” anlamına gelir. Java’da nesnelerin bağlama göre farklı davranmasını sağlar. Polimorfizmin bir biçimi, derleme zamanı polimorfizmi olarak da adlandırılan metot aşırı yüklemedir; çünkü Java hangi metodun çağrılacağını derleme sırasında belirler.

Metotların aşırı yüklenmesi, aynı ada ancak farklı parametrelere sahip birden çok metot tanımlamanıza olanak tanır. Derleyici, parametrelerin sayısına, türüne veya sırasına göre bunları birbirinden ayırır:

public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    
    public int add(int a, int b, int c) {
        return a + b + c;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
}

add(5, 3) metodunu çağırdığınızda, Java ilk metodu kullanır. add(5, 3, 2) metodunu çağırmak ikincisini tetikler ve add(5.0, 3.0) üçüncüsünü çağırır. Derleyici, sağladığınız argümanlara göre doğru sürümü seçer.

Yalnızca dönüş türünü değiştirmenin geçerli bir aşırı yükleme olmadığını unutma. Parametre listesi farklı olmalıdır:

// Geçerli aşırı yükleme DEĞİL - derlenmez
public int getValue() { return 1; }
public double getValue() { return 1.0; }  // Hata!

Aslında yapıcı aşırı yüklemesiyle daha önce aşırı yüklemeyi gördün. Metot aşırı yüklemesi de aynı kuralları izler ve tek bir metot adının farklı girdi senaryolarını işlemesine olanak tanıyarak esneklik sağlar.

challenge icon

Görev

Kolay

Birden fazla mesaj biçimlendirme yöntemi sunarak yöntem aşırı yüklemesini gösteren bir mesaj biçimlendirici oluşturalım. Farklı girdi senaryolarını işleyen, aşırı yüklenmiş birkaç format yöntemi içeren bir yardımcı sınıf oluşturacaksın.

Kodunu iki dosya arasında düzenleyeceksin:

  • MessageFormatter.java: Aşırı yüklenmiş yöntemler aracılığıyla esnek mesaj biçimlendirme sağlayan bir sınıf oluştur. Biçimlendiricin şunlara sahip olmalı:
    • Mesajı köşeli parantezler içine alarak döndüren bir format(String message) yöntemi: [message]
    • Mesajı, belirtilen sayıda ve aralarında boşluk olacak şekilde tekrarlayarak döndüren bir format(String message, int repeatCount) yöntemi
    • Öneki mesaja ekleyerek döndüren bir format(String message, String prefix) yöntemi: prefix: message
    • Şunu döndüren bir format(String message, String prefix, String suffix) yöntemi: prefix: message (suffix)
    Derleyici, geçirdiğin bağımsız değişkenlere göre doğru yöntemi seçecek — işte derleme zamanı çok biçimliliği uygulamada böyle çalışır!
  • Main.java: Aşırı yüklenmiş dört yöntemin birlikte çalıştığını göster. Dört girdi alacaksın: bir mesaj (String), bir tekrar sayısı (int), bir önek (String) ve bir sonek (String). Bir MessageFormatter oluştur ve format yönteminin her sürümünü çağırarak her sonucu kendi satırına yazdır:
    • İlk olarak, yalnızca mesajla biçimlendir
    • İkinci olarak, mesajı ve tekrar sayısını kullanarak biçimlendir
    • Üçüncü olarak, mesajı ve öneki kullanarak biçimlendir
    • Dördüncü olarak, mesajı, öneki ve soneki kullanarak biçimlendir

Dört girdi alacaksın: mesaj metni, mesajın kaç kez tekrarlanacağı, bir önek dizesi ve bir sonek dizesi.

Örneğin mesaj "Hello", tekrar sayısı 3, önek "INFO" ve sonek "done" ise çıktın, her biri farklı bir aşırı yüklenmiş yöntemi kullanan aynı mesajın dört farklı biçimlendirilmiş sürümünü göstermeli!

REQUIRED OUTPUT FORMAT: [Your translated content here]

Kendin dene

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Girdileri oku
        String message = scanner.nextLine();
        int repeatCount = Integer.parseInt(scanner.nextLine());
        String prefix = scanner.nextLine();
        String suffix = scanner.nextLine();
        
        // TODO: Bir MessageFormatter nesnesi oluşturun
        
        // TODO: format metodunu sadece message ile çağırın ve sonucu yazdırın
        
        // TODO: format metodunu message ve repeatCount ile çağırın ve sonucu yazdırın
        
        // TODO: format metodunu message ve prefix ile çağırın ve sonucu yazdırın
        
        // TODO: format metodunu message, prefix ve suffix ile çağırın ve sonucu yazdırın
        
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Java derleyicisi