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 métodos de uma classe são conhecidos como os seus membros.
O acesso aos membros pode ser controlado através de modificadores de acesso, sendo os dois mais comuns:
public: o membro pode ser acedido por qualquer código (sem restrições).private: o membro só pode ser acedido por código da mesma classe.Em Java, se não for especificado nenhum modificador de acesso, o padrão é a visibilidade de pacote. Neste caso, o membro é visível a todas as classes definidas no mesmo pacote.
O agrupamento acima referido de dados e comportamento relacionados, bem como a restrição do acesso aos membros, é conhecido como encapsulamento, que é um dos conceitos centrais da programação orientada a objetos.
Podes pensar numa classe como um modelo para criar instâncias dessa classe.
Para criar uma instância de uma classe (também conhecida como 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 (escritos em camelCase) e podem ser definidos em qualquer parte de uma classe (escritos em PascalCase).
class Car {
// Accessible by anyone
public int weight;
// Only accessible by code in this class
private String color;
}
Podes atribuir opcionalmente um valor inicial a um campo. Se um campo não especificar um valor inicial, será definido com o valor predefinido do seu tipo. Os valores dos campos de uma instância podem ser acedidos e atualizados com 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;
Os campos privados são normalmente atualizados como efeito secundário de chamar um método.
Normalmente, esses métodos não devolvem qualquer valor; 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;
}
}
Repara que não é habitual usar campos públicos em classes Java. Normalmente, usam-se campos privados, que são acedidos através de getters e setters.
Dentro de uma classe, a palavra-chave this refere-se à classe atual.
Isto é especialmente útil se um parâmetro tiver o mesmo nome que um campo:
class CarImporter {
private int carsImported;
public void setImportedCars(int carsImported)
{
// Update private field from public method
this.carsImported = carsImported;
}
}