A principal construção orientada a objetos em Java é a classe, que combina dados (campos), também conhecidos como variáveis de instância, e comportamento (métodos). Os campos e os métodos de uma classe são conhecidos como seus membros.
O acesso aos membros pode ser controlado por meio de modificadores de acesso, sendo os dois mais comuns:
public: o membro pode ser acessado por qualquer código (sem restrições).private: o membro só pode ser acessado por código da mesma classe.Em Java, se nenhum modificador de acesso for especificado, o padrão é a visibilidade de pacote. Nesse caso, o membro fica visível para todas as classes definidas no mesmo pacote.
Esse agrupamento de dados e comportamentos relacionados, somado à restrição de acesso aos membros, é conhecido como encapsulamento, um dos conceitos centrais da orientação a objetos.
Você pode pensar em uma classe como um molde para criar instâncias dessa classe.
Para criar uma instância de uma classe (também chamada de objeto), usa-se a palavra-chave new:
class Car {
}
// Create two car instances
Car myCar = new Car();
Car yourCar = new Car();
Os campos têm um tipo e um nome (grafados em camelCase) e podem ser definidos em qualquer lugar de uma classe (grafada em PascalCase).
class Car {
// Accessible by anyone
public int weight;
// Only accessible by code in this class
private String color;
}
É possível atribuir um valor inicial a um campo, de forma opcional. Se um campo não especificar um valor inicial, ele receberá o valor padrão do seu tipo. Os valores dos campos de uma instância podem ser acessados e atualizados usando a notação de ponto.
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;
Campos privados costumam ser atualizados como efeito colateral da chamada de um método.
Esses métodos geralmente não retornam nenhum valor e, nesse caso, o tipo de retorno deve ser void:
class CarImporter {
private int carsImported;
public void importCars(int numberOfCars)
{
// Update private field
carsImported = carsImported + numberOfCars;
}
}
Repare que não é comum usar campos públicos em classes Java. Normalmente usam-se campos privados, acessados por meio de getters e setters.
Dentro de uma classe, a palavra-chave this se refere à classe atual.
Isso é especialmente útil quando um parâmetro tem o mesmo nome de um campo:
class CarImporter {
private int carsImported;
public void setImportedCars(int carsImported)
{
// Update private field from public method
this.carsImported = carsImported;
}
}