toString() Metodu
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 41 / 87.
Java'daki her sınıf, birkaç yararlı metot sağlayan Object sınıfından miras alır. En yaygın olarak geçersiz kılınanlardan biri, bir nesnenin dize temsilini döndüren toString() metodudur.
Varsayılan olarak, toString() sınıf adını ve ardından nesnenin karma kodunu döndürür; bu da pek yardımcı olmaz:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person@15db9742toString() metodunu geçersiz kılarak, nesnenin durumunu açıklayan anlamlı bir çıktı sağlayabilirsiniz:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person[name=" + name + ", age=" + age + "]";
}
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person[name=Alice, age=25]Bir nesneyi yazdırdığınızda veya bir dizeyle birleştirdiğinizde toString() yöntemi otomatik olarak çağrılır. Bu, ekstra kod yazmadan bir nesnenin içeriğini hızlıca görebildiğiniz için hata ayıklamayı çok daha kolay hale getirir.
Görev
KolayÖzel toString() uygulamalarını kullanarak öğeler hakkında anlamlı bilgiler görüntüleyen bir ürün envanter sistemi oluşturalım. Her ürünün net ve okunabilir bir temsilini sağlamak için varsayılan toString() metodunu geçersiz kılan (override) bir Product sınıfı oluşturacaksınız.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
Product.java: Bir envanter öğesini temsil eden bir sınıf oluşturun. Her Product'ın üç özel (private) alanı vardır:name(String),price(double) vequantity(int). Üç alanı da başlatan bir yapıcı (constructor) ekleyin.toString()metodunu, tam olarak şu formatta bir dize döndürecek şekilde geçersiz kılın:Product[name=X, price=Y, quantity=Z]; burada X, Y ve Z gerçek alan değerleridir. Fiyat, düz bir sayı olarak görüntülenmelidir (özel bir biçimlendirme gerekmez).Main.java: Ürünler oluşturup görüntüleyerek Product sınıfınıza hayat verin. Üç girdi alacaksınız: bir ürün adı (String), bir fiyat (double) ve bir miktar (int). Bu değerlerle bir Product oluşturun, ardından ürün nesnesini doğrudanSystem.out.println()kullanarak yazdırın. Geçersiz kıldığınıztoString()metodunuz sayesinde, bu işlem karmaşık varsayılan çıktı yerine otomatik olarak biçimlendirilmiş ürün bilgilerini görüntüleyecektir!
Üç girdi alacaksınız: ürün adı (String), fiyat (double) ve miktar (int).
Nesneyi doğrudan yazdırmanın toString() metodunuzu otomatik olarak nasıl çağırdığına dikkat edin; gerçek uygulamalarda hata ayıklamayı ve günlük tutmayı (logging) bu kadar kolaylaştıran şey budur!
Kopya kağıdı
Java'daki her sınıf Object sınıfından miras alır. toString() metodu, bir nesnenin dize temsilini döndürür.
Varsayılan olarak, toString() sınıf adını ve ardından nesnenin karma kodunu (hash code) döndürür:
Person p = new Person("Alice", 25);
System.out.println(p); // Person@15db9742Anlamlı bir çıktı sağlamak için toString() metodunu geçersiz kılın (override):
@Override
public String toString() {
return "Person[name=" + name + ", age=" + age + "]";
}
Person p = new Person("Alice", 25);
System.out.println(p); // Person[name=Alice, age=25]Bir nesneyi yazdırdığınızda veya bir dize ile birleştirdiğinizde toString() metodu otomatik olarak çağrılır.
Kendin dene
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Girdileri oku
String name = scanner.nextLine();
double price = scanner.nextDouble();
int quantity = scanner.nextInt();
// TODO: Giriş değerleriyle bir Product nesnesi oluşturun
// TODO: Ürün nesnesini doğrudan yazdırın
// (Bu, toString() metodunuzu otomatik olarak çağıracaktır!)
}
}
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ı