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.
Görev
KolayBirden 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)
- Mesajı köşeli parantezler içine alarak döndüren bir
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 veformatyö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: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
}
}
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
1OOP Temelleri
Harici DosyalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarAlanlar (Öznitelikler)Yapıcı MetotYapıcı Metot Aşırı YüklemeÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (extends)super Anahtar KelimesiMetot Geçersiz Kılma (@Override)Yapıcı Metot ZincirlemeObject SınıfıTekli ve Çok Seviyeli KalıtımNeden Çoklu Sınıf Kalıtımı Yok?Özet - Çalışan Hiyerarşisi7Özel Metotlar ve Object Sınıfı
toString() Metoduequals() ve hashCode()clone() MetoducompareTo() ve ComparableComparator ArayüzüÖzet - Özel Sıralama2Erişim Belirleyiciler ve Kapsülleme
Erişim Seviyelerine Genel BakışGetter ve Setter MetotlarıBilgi Gizlemefinal Anahtar KelimesiÖzet - Banka Hesabı Yöneticisi5Polimorfizm
Metot Aşırı Yükleme TemelleriMetot Geçersiz Kılma (Çalışma Zamanı)Upcasting ve Downcastinginstanceof OperatörüSoyut Sınıflar ve MetotlarÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kompozisyon vs KalıtımAgregasyon vs KompozisyonDahili, Yuvalanmış ve Anonim SınıflarEnum'lar ve Enum MetotlarıRecords (Java 16+)Sealed Classes (Java 17+)11Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıBuilder KalıbıObserver KalıbıStrategy Kalıbı14Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakteri GeliştirmeAraç Kiralama Servisi3Sınıf Özellikleri ve Statik Üyeler
Instance ve Statik DeğişkenlerStatik MetotlarStatik BloklarSabitler (static final)Özet - Sayaç ve Utility6Arayüzler ve Soyut Sınıflar
Arayüzlere GirişArayüzleri UygulamaÇoklu Arayüz UygulamaArayüzlerde Default ve StaticSoyut Sınıflar ve ArayüzlerFonksiyonel ArayüzlerÖzet - Ödeme Sistemi9Generics
Generics'e GirişGeneric SınıflarGeneric MetotlarSınırlandırılmış Tip ParametreleriWildcard'lar (?, extends, super)Özet - Generic Container12Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıYineleyici KalıbıKendi başına pratik yap: Online Java derleyicisi