Il principale costrutto orientato agli oggetti in Java è la classe, che combina dati (campi), noti anche come variabili di istanza, e comportamento (metodi). I campi e i metodi di una classe sono noti come i suoi membri.
L'accesso ai membri può essere controllato tramite i modificatori di accesso; i due più comuni sono:
public: il membro è accessibile da qualsiasi codice (nessuna restrizione).private: il membro è accessibile solo dal codice della stessa classe.In Java, se non viene specificato alcun modificatore di accesso, il valore predefinito è la visibilità di package. In questo caso, il membro è visibile a tutte le classi definite nello stesso package.
Questo raggruppamento di dati e comportamento correlati, insieme alla restrizione dell'accesso ai membri, è noto come incapsulamento, uno dei concetti fondamentali della programmazione orientata agli oggetti.
Puoi pensare a una classe come a un modello per creare istanze di quella classe.
Per creare un'istanza di una classe (nota anche come oggetto), si usa la parola chiave new:
class Car {
}
// Create two car instances
Car myCar = new Car();
Car yourCar = new Car();
I campi hanno un tipo e un nome (scritto in camelCase) e possono essere definiti in qualsiasi punto di una classe (il cui nome è in PascalCase).
class Car {
// Accessible by anyone
public int weight;
// Only accessible by code in this class
private String color;
}
A un campo si può facoltativamente assegnare un valore iniziale. Se un campo non specifica un valore iniziale, gli viene assegnato il valore predefinito del suo tipo. I valori dei campi di un'istanza si possono leggere e aggiornare usando la notazione con il punto.
class Car {
// Will be set to specified value
public int weight = 2500;
// Will be set to default value (0)
public int year;
}
Car newCar = new Car();
newCar.weight; // => 2500
newCar.year; // => 0
// Update value of the field
newCar.year = 2018;
I campi privati di solito vengono aggiornati come effetto collaterale della chiamata a un metodo.
Di solito questi metodi non restituiscono alcun valore; in tal caso il tipo restituito dovrebbe essere void:
class CarImporter {
private int carsImported;
public void importCars(int numberOfCars)
{
// Update private field
carsImported = carsImported + numberOfCars;
}
}
Nota che non è consuetudine usare campi pubblici nelle classi Java. Di norma si usano campi privati, a cui si accede tramite getter e setter.
All'interno di una classe, la parola chiave this fa riferimento alla classe corrente.
Questo è particolarmente utile se un parametro ha lo stesso nome di un campo:
class CarImporter {
private int carsImported;
public void setImportedCars(int carsImported)
{
// Update private field from public method
this.carsImported = carsImported;
}
}