Classe e Objeto
Existem muitas linguagens de programação e quase tantos estilos de programação (às vezes chamados de paradigmas). Os programas que escrevemos até agora são principalmente procedurais, porque a ênfase tem sido em especificar procedimentos computacionais. A maioria dos programas Java são orientados a objetos (object-oriented), o que significa que o foco está nos objetos e suas interações. Aqui estão algumas das características da programação orientada a objetos:
Objetos frequentemente representam as entidades no mundo real. A maioria dos métodos são métodos de objeto (como os métodos que você invoca em Strings) em vez de métodos de classe (como os métodos Math). Os métodos que escrevemos até agora foram métodos de classe. Neste capítulo, escreveremos alguns métodos de objeto.
Os objetos são isolados uns dos outros, limitando as formas como interagem, especialmente impedindo-os de acessar variáveis de instância sem invocar métodos. As classes são organizadas em árvores genealógicas onde novas classes estendem classes existentes, adicionando novos métodos e substituindo outros.
Em Java, toda classe estende alguma classe ou outra, exceto a classe Object. A classe mais básica é a classe Object. Ela não contém variáveis de instância, mas fornece os métodos equals e toString, entre outros.
Muitas classes estendem Object, incluindo quase todas as classes que escrevemos e muitos tipos Java como Integer, Double, String, array etc. Qualquer classe que não nomeie explicitamente um pai estende Object por padrão. A “árvore genealógica” de classes é chamada de hierarquia de classes. Object geralmente aparece no topo, com todas as classes filhas abaixo.
Classes e objetos geralmente têm alguns atributos que são usados para descrever essas classes/objetos, e os métodos são usados para executar algumas funções específicas. Aqui, damos um exemplo para mostrar como é uma classe, salve o código em objectTest.java e use a linha de comando para executar o código.
Exemplo:
Escreva o seguinte código no arquivo /home/labex/project/objectTest.java:
// use keyword 'class' to create a new class named Person
class Person
{
/*
* there are four properties,
* name of string type, age of int type
* gender of string type, weight of float type
*/
private String name;
private int age;
private String gender;
private float weight;
// this is a constructor with no return type, the same name as the class, no parameters
public Person(){
}
//this is a constructor with two parameters
public Person(String name, int age){
// use parameters to set object's name and age
this.name = name;
this.age = age;
}
// this is a constructor with four parameters
public Person(String name, int age, String gender, float weight){
// use parameters to set object's name, age, gender and weight
this.name = name;
this.age = age;
this.gender = gender;
this.weight = weight;
}
// this is an object method
public void personInfo(){
System.out.println("Name: " + this.name + "\nAge: "+ this.age + "\nGender: " + this.gender + "\nWeight: "+this.weight);
}
}
public class objectTest{
public static void main(String[] args){
// use 'new' to create an instance of class Person
Person p = new Person("aaa",18,"male",50.5f); // p refers to an object
/* you can try these two different construction methods, and see what the output is.
* Person p = new Person();
* Person p = new Person("aaa",18);
*/
// use object to invoke method personInfo()
p.personInfo();
}
}
Saída:
Execute o arquivo objectTest.java usando os seguintes comandos:
javac /home/labex/project/objectTest.java
java objectTest
Veja a saída:
Name: aaa
Age: 18
Gender: male
Weight: 50.5
Existem quatro atributos na classe Person. Todos os atributos são privados, portanto, não podem ser acessados de fora (só podem ser usados dentro da classe). Existe um método de objeto chamado personInfo usado para imprimir informações pessoais e existem três construtores com o mesmo nome do nome da classe Person. A única diferença entre eles são seus parâmetros. Esse comportamento é chamado de sobrecarga (overloading).