Object Sınıfı
Coddy'nin Java Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 24 / 87.
Java'da, oluşturduğunuz her sınıf otomatik olarak Object adındaki özel bir sınıftan miras alır. Herhangi bir yere extends yazmasanız bile, sınıfınız hala Object sınıfının bir alt sınıfıdır. Bu durum, Object sınıfını tüm sınıf hiyerarşisinin kökü yapar.
public class Person {
// Bu örtük olarak Object sınıfını genişletir
}
// Şuna eşdeğerdir:
public class Person extends Object {
}Her sınıf Object sınıfından miras aldığı için, Java'daki her nesne birkaç yerleşik metoda erişebilir. En yaygın kullanılanlar şunlardır:
| Metot | Amaç |
|---|---|
toString() | Nesnenin dize temsilini döndürür |
equals(Object obj) | İki nesneyi eşitlik açısından karşılaştırır |
hashCode() | Nesne için bir karma kod değeri döndürür |
getClass() | Nesnenin çalışma zamanı sınıfını döndürür |
Varsayılan olarak, bu metotlar genel uygulamalara sahiptir. Örneğin, toString() sınıf adını ve ardından nesnenin bellek adresini döndürür, bu da pek kullanışlı değildir:
Person p = new Person();
System.out.println(p.toString()); // Çıktı: Person@1a2b3c4dBu nedenle, anlamlı davranışlar sağlamak için kendi sınıflarınızda bu metotları sık sık geçersiz kılarsınız. Object sınıfının evrensel ata olduğunu anlamak, neden herhangi bir nesneyi bir Object değişkeninde saklayabildiğinizi ve neden oluşturduğunuz her nesnede belirli metotların mevcut olduğunu açıklamaya yardımcı olur.
Görev
KolayObject sınıfının, Object sınıfından miras alınan metotları gösteren basit bir cihaz envanter sistemi oluşturarak tüm Java sınıflarının evrensel ebeveyni olarak nasıl hizmet ettiğini keşfedelim.
Kodunuzu düzenlemek için üç dosya oluşturacaksınız:
Gadget.java: Elektronik bir cihazı temsil eden bir sınıf oluşturun. Sınıfınız şunlara sahip olmalıdır:name(String) veyear(int) için özel (private) alanlar- Her iki alanı da başlatan bir yapıcı (constructor)
getName()vegetYear()alıcı (getter) metotları
Smartphone.java: Gadget sınıfını genişleten ve akıllı telefona özgü özellikler ekleyen bir alt sınıf oluşturun:brand(String) için özel (private) bir alan- Ad, yıl ve marka alan bir yapıcı - ebeveyn kısmı için
super(name, year)kullanın - Markayı döndüren bir
getBrand()metodu toString()metodunu şu formatı döndürecek şekilde geçersiz kılın (override):Smartphone: [brand] [name] ([year])
Main.java: Varsayılan ve geçersiz kılınmışObjectmetotları arasındaki farkı gösterin. Üç girdi alacaksınız: bir cihaz adı, yılı ve markası. Aynı adı ve yılı (artı akıllı telefon için markayı) kullanarak hem birGadgethem de birSmartphoneoluşturun, ardından:getClass().getSimpleName()kullanarak cihazın sınıf adını yazdırın- Cihazın varsayılan
toString()metodunun "@" sembolünü içerip içermediğini yazdırın (trueveyafalseyazdırın) - Geçersiz kılınmış
toString()metodunu kullanarak akıllı telefonu yazdırın
Üç girdi alacaksınız: cihaz/akıllı telefon adı (String), yıl (int) ve marka (String).
Bu meydan okuma, Object metotlarını geçersiz kılmanın neden önemli olduğunu gösterir - varsayılan toString() size Gadget@1a2b3c gibi bir şey verirken, özel sürümünüz anlamlı bilgiler sağlar!
Kopya kağıdı
Java'da her sınıf otomatik olarak Object sınıfından miras alır, bu da onu tüm sınıf hiyerarşisinin kökü yapar:
public class Person {
// Bu örtük olarak Object sınıfını genişletir
}
// Şuna eşdeğerdir:
public class Person extends Object {
}Java'daki her nesne, Object sınıfından miras alınan birkaç yerleşik metoda erişebilir:
| Metot | Amaç |
|---|---|
toString() | Nesnenin dize temsilini döndürür |
equals(Object obj) | İki nesneyi eşitlik açısından karşılaştırır |
hashCode() | Nesne için bir karma kod değeri döndürür |
getClass() | Nesnenin çalışma zamanı sınıfını döndürür |
Varsayılan olarak, toString() sınıf adını ve ardından nesnenin bellek adresini döndürür:
Person p = new Person();
System.out.println(p.toString()); // Çıktı: Person@1a2b3c4dAnlamlı bir davranış sağlamak için bu metotları kendi sınıflarınızda geçersiz kılabilirsiniz (override). Tüm sınıflar ondan miras aldığı için herhangi bir nesneyi bir Object değişkeninde saklayabilirsiniz.
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();
int year = scanner.nextInt();
scanner.nextLine(); // yeni satır karakterini tüket
String brand = scanner.nextLine();
// TODO: name ve year ile bir Gadget nesnesi oluşturun
// TODO: name, year ve brand ile bir Smartphone nesnesi oluşturun
// TODO: getClass().getSimpleName() kullanarak gadget'ın sınıf adını yazdırın
// TODO: gadget'ın toString() metodunun "@" içerip içermediğini yazdırın (true veya false)
// TODO: smartphone nesnesini yazdırın (geçersiz kılınmış toString() metodunu kullanı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ı