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:
| Metodo | Scopo |
|---|---|
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@1a2b3c4dEcco 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.
Sfida
FacileEsploriamo 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) eyear(int) - Un costruttore che inizializza entrambi i campi
- Metodi getter
getName()egetYear()
- Campi privati per
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])
- Un campo privato per
Main.java: mostra la differenza tra i metodi predefiniti e quelli sovrascritti diObject. Riceverai tre input: il nome del gadget, l'anno e il brand. Crea sia unGadgetsia unoSmartphoneusando 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 "@": stampatrueofalse - Stampa lo smartphone usando il suo
toString()sovrascritto
- Stampa il nome della classe del gadget usando
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())
}
}
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
1Fondamenti della programmazione a oggetti
File esterniIntroduzione alla programmazione a oggettiClassi e oggettiLa parola chiave thisMetodiCampi (attributi)Metodo costruttoreSovraccarico dei costruttoriRipasso - Calcolatrice semplice4Ereditarietà
Ereditarietà di base (extends)La parola chiave superSovrascrittura dei metodi (@Override)Concatenamento dei costruttoriLa classe ObjectEreditarietà singola e multilivelloPerché non esiste l'ereditarietà multipla delle classiRiepilogo: gerarchia dei dipendenti7Metodi speciali e classe Object
Metodo toString()equals() e hashCode()Metodo clone()compareTo() e ComparableInterfaccia ComparatorRiepilogo - Ordinamento personalizzato2Modificatori di accesso e incapsulamento
Panoramica dei livelli di accessoMetodi getter e setterNascondimento delle informazioniLa parola chiave finalRiepilogo - Gestore di conti bancari5Polimorfismo
Nozioni di base sull'overloading dei metodiOverride dei metodi (a runtime)Upcasting e downcastingL'operatore instanceofClassi e metodi astrattiRiepilogo - Calcolatore di forme8Concetti avanzati di OOP
Composizione vs ereditarietàAggregazione vs composizioneClassi interne, annidate e anonimeEnum e metodi degli EnumRecord (Java 16+)Classi sealed (Java 17+)11Modelli di progettazione Parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern BuilderPattern ObserverPattern Strategy3Proprietà di classe e membri statici
Variabili di istanza e staticheMetodi staticiBlocchi staticiCostanti (static final)Riepilogo - Contatore e utility6Interfacce e classi astratte
Introduzione alle interfacceImplementazione delle interfacceImplementazione di più interfacceMetodi default e static nelle interfacceClassi astratte e interfacce a confrontoInterfacce funzionaliRiepilogo: sistema di pagamento9Tipi generici
Introduzione ai tipi genericiClassi genericheMetodi genericiParametri di tipo con limitiCaratteri jolly (?, extends, super)Riepilogo - Contenitore generico12Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositePattern IteratorEsercitati da solo: Compilatore Java online