Classes e objetos em Java
Classes e objetos são conceitos básicos de Programação Orientada a Objetos que giram em torno de entidades da vida real.
Classe
Uma classe é um projeto ou protótipo definido pelo usuário a partir do qual os objetos são criados. Ele representa o conjunto de propriedades ou métodos comuns a todos os objetos de um tipo. Em geral, as declarações de classe podem incluir esses componentes, na ordem:
- Modificadores : uma classe pode ser pública ou ter acesso padrão (consulte isto para obter detalhes).
- palavra-chave da classe: a palavra-chave da classe é usada para criar uma classe.
- Nome da classe: o nome deve começar com uma letra inicial (maiúscula por convenção).
- Superclasse (se houver): O nome do pai da classe (superclasse), se houver, precedido pela palavra-chave extends. Uma classe só pode estender (subclasse) um pai.
- Interfaces (se houver): uma lista separada por vírgulas de interfaces implementadas pela classe, se houver, precedida pela palavra-chave implements. Uma classe pode implementar mais de uma interface.
- Corpo: o corpo da classe entre colchetes, {}.
Construtores são usados para inicializar novos objetos. Os campos são variáveis que fornecem o estado da classe e seus objetos, e métodos são usados para implementar o comportamento da classe e seus objetos.
Existem vários tipos de classes que são usados em aplicativos de tempo real, como classes aninhadas , classes anônimas , expressões lambda .
Objeto
É uma unidade básica de Programação Orientada a Objetos e representa as entidades da vida real. Um programa Java típico cria muitos objetos que, como você sabe, interagem invocando métodos. Um objeto consiste em:
- Estado : é representado pelos atributos de um objeto. Ele também reflete as propriedades de um objeto.
- Comportamento : é representado por métodos de um objeto. Ele também reflete a resposta de um objeto com outros objetos.
- Identidade : dá um nome único a um objeto e permite que um objeto interaja com outros objetos.
Exemplo de um objeto: cachorro
Os objetos correspondem a coisas encontradas no mundo real. Por exemplo, um programa gráfico pode ter objetos como “círculo”, “quadrado”, “menu”. Um sistema de compras online pode ter objetos como “carrinho de compras”, “cliente” e “produto”.
Declarando objetos (também chamado de instanciar uma classe)
Quando um objeto de uma classe é criado, diz-se que a classe está instanciada . Todas as instâncias compartilham os atributos e o comportamento da classe. Mas os valores desses atributos, ou seja, o estado são únicos para cada objeto. Uma única classe pode ter qualquer número de instâncias.
Exemplo:
Conforme declaramos variáveis como (nome do tipo;). Isso notifica o compilador de que usaremos o nome para se referir aos dados cujo tipo é tipo. Com uma variável primitiva, essa declaração também reserva a quantidade adequada de memória para a variável. Portanto, para a variável de referência, o tipo deve ser estritamente um nome de classe concreto. Em geral, não podemos criar objetos de uma classe abstrata ou de uma interface.
Dog tuffy;
Se declararmos a variável de referência (tuffy) assim, seu valor será indeterminado (nulo) até que um objeto seja realmente criado e atribuído a ela. A simples declaração de uma variável de referência não cria um objeto.
Inicializando um objeto
O novo operador instancia uma classe alocando memória para um novo objeto e retornando uma referência a essa memória. O novo operador também invoca o construtor da classe.
// Class Declaration
public class Dog
{
// Instance Variables
String name;
String breed;
int age;
String color;
// Constructor Declaration of Class
public Dog(String name, String breed,
int age, String color)
{
this.name = name;
this.breed = breed;
this.age = age;
this.color = color;
}
// method 1
public String getName()
{
return name;
}
// method 2
public String getBreed()
{
return breed;
}
// method 3
public int getAge()
{
return age;
}
// method 4
public String getColor()
{
return color;
}
@Override
public String toString()
{
return("Hi my name is "+ this.getName()+
".\nMy breed,age and color are " +
this.getBreed()+"," + this.getAge()+
","+ this.getColor());
}
public static void main(String[] args)
{
Dog tuffy = new Dog("tuffy","papillon", 5, "white");
System.out.println(tuffy.toString());
}
}
Saída:
Hi my name is tuffy. My breed,age and color are papillon,5,white
- Esta classe contém um único construtor. Podemos reconhecer um construtor porque sua declaração usa o mesmo nome da classe e não tem tipo de retorno. O compilador Java diferencia os construtores com base no número e no tipo dos argumentos. O construtor da classe Dog aceita quatro argumentos. A declaração a seguir fornece "tuffy", "papillon", 5, "white" como valores para esses argumentos:
Dog tuffy = new Dog("tuffy","papillon",5, "white");
- O resultado da execução desta instrução pode ser ilustrado como:
Observação: todas as classes têm pelo menos um construtor. Se uma classe não declara nenhum explicitamente, o compilador Java fornece automaticamente um construtor sem argumento, também chamado de construtor padrão. Este construtor padrão chama o construtor sem argumento do pai da classe (pois contém apenas uma instrução, ou seja, super();), ou o construtor da classe Object se a classe não tiver outro pai (já que a classe Object é pai de todas as classes direta ou indiretamente )
Maneiras de criar objeto de uma classe
Existem quatro maneiras de criar objetos em java. Estritamente falando, há apenas uma maneira (usando a nova palavra-chave) e o restante usa internamente a nova palavra-chave.
- Usando nova palavra-chave: É a forma mais comum e geral de criar objetos em java. Exemplo:
// creating object of class Test Test t = new Test();
- Usando o método Class.forName (String className): Há uma classe predefinida no pacote java.lang com o nome Class. O método forName (String className) retorna o objeto Class associado à classe com o nome de string fornecido. Precisamos fornecer o nome totalmente qualificado de uma classe. Ao chamar o novo método Instance() neste objeto Class, retorna uma nova instância da classe com o nome de string fornecido.
// creating object of public class Test // consider class Test present in com.p1 package Test obj = (Test)Class.forName("com.p1.Test").newInstance();
- Usando o método clone(): o método clone() está presente na classe Object. Ele cria e retorna uma cópia do objeto.
// creating object of class Test Test t1 = new Test(); // creating clone of above object Test t2 = (Test)t1.clone();
- Desserialização: a desserialização é uma técnica de leitura de um objeto do estado salvo em um arquivo. Consulte serialização / desserialização em java
FileInputStream file = new FileInputStream(filename); ObjectInputStream in = new ObjectInputStream(file); Object obj = in.readObject();
Criação de vários objetos por apenas um tipo (uma boa prática)
- Em tempo real, precisamos de diferentes objetos de uma classe em diferentes métodos. Criar várias referências para armazená-las não é uma boa prática e, portanto, declaramos uma variável de referência estática e a usamos sempre que necessário. Nesse caso, o desperdício de memória é menor. Os objetos que não são mais referenciados serão destruídos pelo Garbage Collector de java. Exemplo:
Test test = new Test(); test = new Test();
- No sistema de herança, usamos a variável de referência da classe pai para armazenar um objeto de subclasse. Nesse caso, podemos alternar para diferentes objetos de subclasse usando a mesma variável referenciada. Exemplo:
class Animal {} class Dog extends Animal {} class Cat extends Animal {} public class Test { // using Dog object Animal obj = new Dog(); // using Cat object obj = new Cat(); }
Objetos anônimos
Objetos anônimos são os objetos instanciados, mas não armazenados em uma variável de referência.
- Eles são usados para chamada de método imediata.
- Eles serão destruídos após a chamada do método.
- Eles são amplamente utilizados em diferentes bibliotecas. Por exemplo, em bibliotecas AWT, eles são usados para realizar alguma ação na captura de um evento (por exemplo, um pressionamento de tecla).
- No exemplo abaixo, quando uma tecla é um botão (referido por btn) é pressionado, estamos simplesmente criando um objeto anônimo da classe EventHandler apenas para chamar o método de manipulação.
btn.setOnAction(new EventHandler() { public void handle(ActionEvent event) { System.out.println("Hello World!"); } });
Este artigo é uma contribuição de Gaurav Miglani . Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando write.geeksforgeeks.org ou enviar seu artigo para review-team@geeksforgeeks.org. Veja o seu artigo na página principal do GeeksforGeeks e ajude outros Geeks.
Escreva comentários se encontrar algo incorreto ou se quiser compartilhar mais informações sobre o tópico discutido acima.
Aprendendo inglês e usando o Anki? Use o Faluchu e esqueça os cartões. É gratis!
Usar o Faluchu