Menu
Coddy logo textTech

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:

MetotAmaç
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@1a2b3c4d

Bu 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.

challenge icon

Görev

Kolay

Object 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) ve year (int) için özel (private) alanlar
    • Her iki alanı da başlatan bir yapıcı (constructor)
    • getName() ve getYear() alıcı (getter) metotları
    Object sınıfından herhangi bir metodu geçersiz kılmayın (override) - önce varsayılan davranışı görmek istiyoruz.
  • 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ış Object metotları 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 bir Gadget hem de bir Smartphone oluş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 (true veya false yazdı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:

MetotAmaç
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@1a2b3c4d

Anlamlı 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)
        
    }
}
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