Menu
Coddy logo textTech

La classe Object

Fa parte della sezione Programmazione orientata agli oggetti del percorso Java di Coddy. Lezione 24 di 87.

In Java, ogni classe che crei eredita automaticamente da una classe speciale chiamata Object. Anche se non scrivi extends da nessuna parte, la tua classe è comunque una sottoclasse di Object. Questo fa di Object la radice dell'intera gerarchia delle classi.

public class Person {
    // Questa classe estende implicitamente Object
}

// Equivale a:
public class Person extends Object {
}

Poiché ogni classe eredita da Object, ogni oggetto in Java ha accesso a diversi metodi integrati. Tra i più usati ci sono:

MetodoScopo
toString()Restituisce una rappresentazione in forma di stringa dell'oggetto
equals(Object obj)Confronta due oggetti per verificarne l'uguaglianza
hashCode()Restituisce un valore hash per l'oggetto
getClass()Restituisce la classe dell'oggetto in fase di esecuzione

Per impostazione predefinita, questi metodi hanno implementazioni generiche. Ad esempio, toString() restituisce il nome della classe seguito da @ e dal codice hash dell'oggetto in esadecimale, il che non è molto utile:

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

Ecco perché spesso sovrascriverai questi metodi nelle tue classi per fornire un comportamento significativo. Capire che Object è la classe genitore universale aiuta a spiegare perché puoi memorizzare qualsiasi oggetto in una variabile Object e perché determinati metodi sono disponibili su ogni oggetto che crei.

challenge icon

Sfida

Facile

Esploriamo come la classe Object funge da genitore universale di tutte le classi Java creando un semplice sistema di inventario di gadget che dimostra i metodi ereditati da Object.

Creerai tre file per organizzare il tuo codice:

  • Gadget.java: crea una classe che rappresenta un gadget elettronico. La tua classe dovrebbe avere:
    • Campi privati per name (String) e year (int)
    • Un costruttore che inizializza entrambi i campi
    • Metodi getter getName() e getYear()
    Non sovrascrivere alcun metodo di Object: vogliamo prima vedere il comportamento predefinito.
  • Smartphone.java: crea una sottoclasse che estende Gadget e aggiunge funzionalità specifiche degli smartphone:
    • Un campo privato per brand (String)
    • Un costruttore che accetta name, year e brand: usa super(name, year) per la parte relativa alla classe genitore
    • Un metodo getBrand() che restituisce il brand
    • Sovrascrivi il metodo toString() affinché restituisca: Smartphone: [brand] [name] ([year])
  • Main.java: mostra la differenza tra i metodi predefiniti e quelli sovrascritti di Object. Riceverai tre input: il nome del gadget, l'anno e il brand. Crea sia un Gadget sia uno Smartphone usando lo stesso nome e anno (più il brand per lo smartphone), quindi:
    • Stampa il nome della classe del gadget usando getClass().getSimpleName()
    • Stampa se il toString() predefinito del gadget contiene il simbolo "@": stampa true o false
    • Stampa lo smartphone usando il suo toString() sovrascritto

Riceverai tre input: il nome del gadget/smartphone (String), l'anno (int) e il brand (String).

Questa sfida mostra perché è importante sovrascrivere i metodi di Object: il toString() predefinito restituisce qualcosa come Gadget@1a2b3c, mentre la tua versione personalizzata fornisce informazioni significative!

Provalo tu

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Leggi i dati di input
        String name = scanner.nextLine();
        int year = scanner.nextInt();
        scanner.nextLine(); // consuma il carattere di nuova riga
        String brand = scanner.nextLine();
        
        // TODO: Crea un oggetto Gadget con name e year
        
        // TODO: Crea un oggetto Smartphone con name, year e brand
        
        // TODO: Stampa il nome della classe del gadget usando getClass().getSimpleName()
        
        // TODO: Stampa se toString() del gadget contiene "@" (true o false)
        
        // TODO: Stampa lo smartphone (usa la versione ridefinita di toString())
        
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Java online