Java - Objeto e Classes
Java é uma linguagem orientada a objetos. Como uma linguagem que possui o recurso Orientado a Objetos, Java suporta os seguintes conceitos fundamentais −
- Polimorfismo
- Herança
- Encapsulação
- Abstração
- Aulas
- Objetos
- Instância
- Método
- Transmissão de mensagem
Neste capítulo, veremos os conceitos - Classes e Objetos.
-
Objeto − Objetos têm estados e comportamentos. Exemplo:Um cão tem estados - cor, nome, raça, bem como comportamentos - abanando o rabo, latindo, comendo. Um objeto é uma instância de uma classe.
-
Classe − Uma classe pode ser definida como um template/blueprint que descreve o comportamento/estado que o objeto de seu tipo suporta.
Objetos em Java
Vamos agora olhar profundamente para o que são objetos. Se considerarmos o mundo real, podemos encontrar muitos objetos ao nosso redor, carros, cachorros, humanos, etc. Todos esses objetos têm um estado e um comportamento.
Se considerarmos um cachorro, então seu estado é - nome, raça, cor, e o comportamento é - latir, abanar o rabo, correr.
Se você comparar o objeto de software com um objeto do mundo real, eles terão características muito semelhantes.
Objetos de software também têm um estado e um comportamento. O estado de um objeto de software é armazenado em campos e o comportamento é mostrado por meio de métodos.
Assim, no desenvolvimento de software, os métodos operam no estado interno de um objeto e a comunicação objeto a objeto é feita por meio de métodos.
Aulas em Java
Uma classe é um projeto a partir do qual objetos individuais são criados.
Segue um exemplo de uma aula.
Exemplo
public class Dog { String breed; int age; String color; void barking() { } void hungry() { } void sleeping() { } }
Uma classe pode conter qualquer um dos seguintes tipos de variáveis.
-
Variáveis locais − Variáveis definidas dentro de métodos, construtores ou blocos são chamadas de variáveis locais. A variável será declarada e inicializada dentro do método e a variável será destruída quando o método for concluído.
-
Variáveis de instância − Variáveis de instância são variáveis dentro de uma classe, mas fora de qualquer método. Essas variáveis são inicializadas quando a classe é instanciada. As variáveis de instância podem ser acessadas de dentro de qualquer método, construtor ou blocos dessa classe específica.
-
Variáveis de classe − Variáveis de classe são variáveis declaradas dentro de uma classe, fora de qualquer método, com a palavra-chave static.
Uma classe pode ter qualquer número de métodos para acessar o valor de vários tipos de métodos. No exemplo acima, latindo(), com fome() e dormindo() são métodos.
A seguir estão alguns dos tópicos importantes que precisam ser discutidos ao examinar as classes da linguagem Java.
Construtores
Ao discutir sobre classes, um dos subtópicos mais importantes seriam os construtores. Cada classe tem um construtor. Se não escrevermos explicitamente um construtor para uma classe, o compilador Java construirá um construtor padrão para essa classe.
Cada vez que um novo objeto é criado, pelo menos um construtor será invocado. A regra principal dos construtores é que eles devem ter o mesmo nome da classe. Uma classe pode ter mais de um construtor.
A seguir está um exemplo de um construtor -
Exemplo
public class Puppy { public Puppy() { } public Puppy(String name) { // This constructor has one parameter, name. } }
Java também suporta Classes Singleton onde você seria capaz de criar apenas uma instância de uma classe.
Observação − Temos dois tipos diferentes de construtores. Discutiremos os construtores em detalhes nos capítulos subsequentes.
Criando um objeto
Como mencionado anteriormente, uma classe fornece os planos para objetos. Então, basicamente, um objeto é criado a partir de uma classe. Em Java, a palavra-chave new é usada para criar novos objetos.
Existem três etapas ao criar um objeto de uma classe -
-
Declaração − Uma declaração de variável com um nome de variável com um tipo de objeto.
-
Instanciação − A palavra-chave 'new' é usada para criar o objeto.
-
Inicialização − A palavra-chave 'new' é seguida por uma chamada para um construtor. Essa chamada inicializa o novo objeto.
A seguir está um exemplo de criação de um objeto -
Exemplo
Demonstração ao vivopublic class Puppy { public Puppy(String name) { // This constructor has one parameter, name. System.out.println("Passed Name is :" + name ); } public static void main(String []args) { // Following statement would create an object myPuppy Puppy myPuppy = new Puppy( "tommy" ); } }
Se compilarmos e executarmos o programa acima, ele produzirá o seguinte resultado -
Saída
Passed Name is :tommy
Acessando variáveis e métodos de instância
Variáveis e métodos de instância são acessados por meio de objetos criados. Para acessar uma variável de instância, a seguir está o caminho totalmente qualificado -
/* First create an object */ ObjectReference = new Constructor(); /* Now call a variable as follows */ ObjectReference.variableName; /* Now you can call a class method as follows */ ObjectReference.MethodName();
Exemplo
Este exemplo explica como acessar variáveis de instância e métodos de uma classe.
Demonstração ao vivo
public class Puppy { int puppyAge; public Puppy(String name) { // This constructor has one parameter, name. System.out.println("Name chosen is :" + name ); } public void setAge( int age ) { puppyAge = age; } public int getAge( ) { System.out.println("Puppy's age is :" + puppyAge ); return puppyAge; } public static void main(String []args) { /* Object creation */ Puppy myPuppy = new Puppy( "tommy" ); /* Call class method to set puppy's age */ myPuppy.setAge( 2 ); /* Call another class method to get puppy's age */ myPuppy.getAge( ); /* You can access instance variable as follows as well */ System.out.println("Variable Value :" + myPuppy.puppyAge ); } }
Se compilarmos e executarmos o programa acima, ele produzirá o seguinte resultado -
Saída
Name chosen is :tommy Puppy's age is :2 Variable Value :2
Regras de declaração do arquivo de origem
Como a última parte desta seção, vamos agora examinar as regras de declaração do arquivo de origem. Essas regras são essenciais ao declarar classes, import declarações e pacote instruções em um arquivo de origem.
-
Só pode haver uma classe pública por arquivo de origem.
-
Um arquivo de origem pode ter várias classes não públicas.
-
O nome da classe pública também deve ser o nome do arquivo de origem, que deve ser anexado por .java no final. Por exemplo:o nome da classe é classe pública Employee{} então o arquivo fonte deve ser como Employee.java.
-
Se a classe for definida dentro de um pacote, a instrução do pacote deverá ser a primeira instrução no arquivo de origem.
-
Se as instruções de importação estiverem presentes, elas devem ser escritas entre a instrução do pacote e a declaração da classe. Se não houver instruções de pacote, a instrução de importação deverá ser a primeira linha do arquivo de origem.
-
As instruções de importação e pacote implicarão em todas as classes presentes no arquivo de origem. Não é possível declarar diferentes instruções de importação e/ou pacote para diferentes classes no arquivo de origem.
As classes têm vários níveis de acesso e existem diferentes tipos de classes; classes abstratas, classes finais, etc. Explicaremos sobre tudo isso no capítulo sobre modificadores de acesso.
Além dos tipos de classes mencionados acima, Java também possui algumas classes especiais chamadas de classes internas e classes anônimas.
Pacote Java
Em palavras simples, é uma forma de categorizar as classes e interfaces. Ao desenvolver aplicativos em Java, centenas de classes e interfaces serão escritas, portanto, categorizar essas classes é uma obrigação e facilita muito a vida.
Declarações de importação
Em Java, se for fornecido um nome totalmente qualificado, que inclui o pacote e o nome da classe, o compilador poderá localizar facilmente o código-fonte ou as classes. A instrução de importação é uma maneira de fornecer o local adequado para o compilador encontrar essa classe específica.
Por exemplo, a linha a seguir pediria ao compilador para carregar todas as classes disponíveis no diretório java_installation/java/io −
import java.io.*;
Um estudo de caso simples
Para nosso estudo de caso, criaremos duas classes. Eles são Employee e EmployeeTest.
Primeiro abra o bloco de notas e adicione o seguinte código. Lembre-se que esta é a classe Employee e a classe é uma classe pública. Agora, salve este arquivo de origem com o nome Employee.java.
A classe Employee tem quatro variáveis de instância - nome, idade, designação e salário. A classe tem um construtor explicitamente definido, que recebe um parâmetro.
Exemplo
import java.io.*; public class Employee { String name; int age; String designation; double salary; // This is the constructor of the class Employee public Employee(String name) { this.name = name; } // Assign the age of the Employee to the variable age. public void empAge(int empAge) { age = empAge; } /* Assign the designation to the variable designation.*/ public void empDesignation(String empDesig) { designation = empDesig; } /* Assign the salary to the variable salary.*/ public void empSalary(double empSalary) { salary = empSalary; } /* Print the Employee details */ public void printEmployee() { System.out.println("Name:"+ name ); System.out.println("Age:" + age ); System.out.println("Designation:" + designation ); System.out.println("Salary:" + salary); } }
Conforme mencionado anteriormente neste tutorial, o processamento começa a partir do método main. Portanto, para que possamos executar esta classe Employee deve haver um método main e objetos devem ser criados. Estaremos criando uma classe separada para essas tarefas.
A seguir está o EmployeeTest class, que cria duas instâncias da classe Employee e invoca os métodos para cada objeto para atribuir valores para cada variável.
Salve o código a seguir no arquivo EmployeeTest.java.
import java.io.*; public class EmployeeTest { public static void main(String args[]) { /* Create two objects using constructor */ Employee empOne = new Employee("James Smith"); Employee empTwo = new Employee("Mary Anne"); // Invoking methods for each object created empOne.empAge(26); empOne.empDesignation("Senior Software Engineer"); empOne.empSalary(1000); empOne.printEmployee(); empTwo.empAge(21); empTwo.empDesignation("Software Engineer"); empTwo.empSalary(500); empTwo.printEmployee(); } }
Agora, compile ambas as classes e execute EmployeeTest para ver o resultado da seguinte forma -
Saída
C:\> javac Employee.java C:\> javac EmployeeTest.java C:\> java EmployeeTest Name:James Smith Age:26 Designation:Senior Software Engineer Salary:1000.0 Name:Mary Anne Age:21 Designation:Software Engineer Salary:500.0
O que vem a seguir?
Na próxima sessão, discutiremos os tipos de dados básicos em Java e como eles podem ser usados no desenvolvimento de aplicativos Java.
Java