Menu
Coddy logo textTech

Klasa Object

Część sekcji Programowanie obiektowe ścieżki Java w Coddy. Lekcja 24 z 87.

W języku Java każda tworzona przez ciebie klasa automatycznie dziedziczy po specjalnej klasie o nazwie Object. Nawet jeśli nigdzie nie wpiszesz extends, twoja klasa nadal jest klasą potomną Object. Dzięki temu Object jest korzeniem całej hierarchii klas.

public class Person {
    // Ta klasa niejawnie dziedziczy po Object
}

// Jest równoważne:
public class Person extends Object {
}

Ponieważ każda klasa dziedziczy po Object, każdy obiekt w Javie ma dostęp do kilku wbudowanych metod. Do najczęściej używanych należą:

MetodaCel
toString()Zwraca tekstową reprezentację obiektu
equals(Object obj)Porównuje dwa obiekty pod kątem równości
hashCode()Zwraca wartość kodu skrótu obiektu
getClass()Zwraca klasę obiektu w czasie wykonywania programu

Domyślnie te metody mają ogólne implementacje. Na przykład toString() zwraca nazwę klasy, po której następują @ i kod skrótu obiektu zapisany w systemie szesnastkowym, co nie jest zbyt przydatne:

Person p = new Person();
System.out.println(p.toString());  // Wynik: Person@1a2b3c4d

Dlatego często nadpisujesz te metody we własnych klasach, aby zapewnić sensowne działanie. Zrozumienie, że Object jest uniwersalną klasą nadrzędną, pomaga wyjaśnić, dlaczego możesz przechowywać dowolny obiekt w zmiennej typu Object oraz dlaczego niektóre metody są dostępne dla każdego tworzonego przez Ciebie obiektu.

challenge icon

Wyzwanie

Łatwy

Sprawdźmy, jak klasa Object pełni rolę uniwersalnej klasy nadrzędnej wszystkich klas Java, tworząc prosty system inwentaryzacji gadżetów, który pokazuje dziedziczone metody z Object.

Utworzysz trzy pliki, aby uporządkować swój kod:

  • Gadget.java: Utwórz klasę reprezentującą elektroniczny gadżet. Twoja klasa powinna mieć:
    • Prywatne pola dla name (String) i year (int)
    • Konstruktor inicjalizujący oba pola
    • Metody pobierające getName() i getYear()
    Nie nadpisuj żadnych metod z Object — najpierw chcemy zobaczyć domyślne działanie.
  • Smartphone.java: Utwórz podklasę rozszerzającą Gadget i dodającą funkcje charakterystyczne dla smartfona:
    • Prywatne pole dla brand (String)
    • Konstruktor przyjmujący name, year i brand — użyj super(name, year) dla części dotyczącej klasy nadrzędnej
    • Metodę getBrand(), która zwraca markę
    • Nadpisz metodę toString(), aby zwracała: Smartphone: [brand] [name] ([year])
  • Main.java: Pokaż różnicę między domyślnymi a nadpisanymi metodami Object. Otrzymasz trzy dane wejściowe: nazwę gadżetu, rok i markę. Utwórz obiekt Gadget i obiekt Smartphone, używając tej samej nazwy i roku (oraz marki dla smartfona), a następnie:
    • Wyświetl nazwę klasy gadżetu za pomocą getClass().getSimpleName()
    • Wyświetl informację, czy domyślna metoda toString() gadżetu zawiera symbol "@"; wyświetl true lub false
    • Wyświetl smartfona za pomocą nadpisanej metody toString()

Otrzymasz trzy dane wejściowe: nazwę gadżetu/smartfona (String), rok (int) i markę (String).

To wyzwanie pokazuje, dlaczego nadpisywanie metod Object ma znaczenie — domyślna metoda toString() zwraca coś w rodzaju Gadget@1a2b3c, podczas gdy Twoja własna wersja dostarcza przydatnych informacji!

Spróbuj swoich sił

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Wczytaj dane wejściowe
        String name = scanner.nextLine();
        int year = scanner.nextInt();
        scanner.nextLine(); // pomiń znak nowego wiersza
        String brand = scanner.nextLine();
        
        // TODO: Utwórz obiekt Gadget z name i year
        
        // TODO: Utwórz obiekt Smartphone z name, year i brand
        
        // TODO: Wypisz nazwę klasy obiektu gadget za pomocą getClass().getSimpleName()
        
        // TODO: Wypisz, czy toString() obiektu gadget zawiera "@" (true lub false)
        
        // TODO: Wypisz obiekt smartphone (używa przesłoniętej metody toString())
        
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Java online