Prévia do material em texto
Revisão - Programação Orientada a
Objetos em Java
1. Classes e Objetos
Definição
● Classe: É um modelo ou template que define as características (atributos) e
comportamentos (métodos) que os objetos criados a partir dela terão.
● Objeto: É uma instância de uma classe, ou seja, uma representação concreta criada
a partir do modelo da classe.
Conceitos Importantes
● Quando usamos new em Java, criamos um novo objeto com uma nova referência
na memória
● Ao comparar objetos com ==, comparamos se as referências apontam para o
mesmo objeto, não o conteúdo
● Para comparar conteúdo, devemos usar o método equals()
Exemplo
public class Pessoa {
private String nome;
private int idade;
// Construtor, getters, setters...
}
// Criando objetos
Pessoa p1 = new Pessoa(); // Nova instância
Pessoa p2 = new Pessoa(); // Outra instância diferente
2. Métodos Construtores
Características
● Método especial usado para inicializar objetos no momento da criação
● Tem o mesmo nome da classe
● Não possui tipo de retorno
● É chamado automaticamente quando usamos new
Construtor Padrão
● Se você não declarar nenhum construtor, o compilador Java cria
automaticamente um construtor padrão sem parâmetros
● Se você criar qualquer construtor personalizado, o construtor padrão não é mais
gerado automaticamente
Exemplo
public class Produto {
private String nome;
private double preco;
// Construtor padrão
public Produto() {}
// Construtor com parâmetros
public Produto(String nome, double preco) {
this.nome = nome;
this.preco = preco;
}
}
3. Sobrecarga de Métodos (Overloading)
Definição
Permite criar múltiplos métodos com o mesmo nome, mas com tipos ou número de
parâmetros diferentes.
Regras
● Métodos sobrecarregados devem ter tipos ou número de parâmetros diferentes
● Podem ter modificadores de acesso diferentes
● O tipo de retorno pode ser diferente (mas não é suficiente por si só)
Exemplo
public class Calculadora {
public int somar(int a, int b) {
return a + b;
}
public double somar(double a, double b) {
return a + b;
}
public int somar(int a, int b, int c) {
return a + b + c;
}
}
4. Sobrescrita de Métodos (Override)
Definição
Permite que uma subclasse substitua o comportamento de um método herdado da
superclasse.
Regras
● O método deve ter a mesma assinatura (nome, parâmetros, tipo de retorno)
● Não é possível sobrescrever métodos final
● Use a anotação @Override para verificação em tempo de compilação
Diferença entre Sobrescrita e Sobrecarga
● Sobrescrita: Muda a lógica do método herdado (mesma assinatura)
● Sobrecarga: Usa diferentes parâmetros (mesmo nome, parâmetros diferentes)
5. Encapsulamento
Definição
Princípio que consiste em esconder os detalhes internos de uma classe e expor apenas
o necessário por meio de métodos públicos.
Como Implementar
1. Tornar atributos privados (private)
2. Criar métodos públicos de acesso (getters e setters)
3. Controlar o acesso aos dados através destes métodos
Importância
● Segurança: Protege os dados de acesso inadequado
● Flexibilidade: Permite mudanças internas sem afetar código externo
● Validação: Possibilita validar dados antes de alterá-los
● Manutenibilidade: Facilita manutenção e evolução do código
Exemplo
public class ContaBancaria {
private double saldo; // Atributo privado
// Getter
public double getSaldo() {
return saldo;
}
// Setter com validação
public void setSaldo(double saldo) {
if (saldo >= 0) {
this.saldo = saldo;
}
}
// Método para depositar
public void depositar(double valor) {
if (valor > 0) {
this.saldo += valor;
}
}
}
Quando NÃO criar um setter
Torne um atributo private sem método set quando você deseja que o atributo nunca
mude após a criação do objeto (imutabilidade).
6. Herança
Definição
Mecanismo que permite que uma classe (subclasse) herde características e
comportamentos de outra classe (superclasse).
Palavra-chave
● Use extends para criar uma subclasse
● Use super para acessar métodos e atributos da superclasse
Herança Múltipla
Java NÃO suporta herança múltipla de classes. Uma classe só pode estender uma única
classe por vez.
Exemplo de Hierarquia
// Superclasse
public class Veiculo {
protected String marca;
protected int ano;
public void acelerar() {
System.out.println("Acelerando...");
}
}
// Subclasse
public class Carro extends Veiculo {
private int numeroPortas;
@Override
public void acelerar() {
System.out.println("Carro acelerando...");
}
public void abrirPorta() {
System.out.println("Abrindo porta do carro");
}
}
// Subclasse da subclasse
public class CarroEsportivo extends Carro {
private boolean turbo;
@Override
public void acelerar() {
super.acelerar(); // Chama método da superclasse
System.out.println("Com turbo ativado!");
}
}
7. Classes Abstratas
Definição
Classes que não podem ser instanciadas diretamente e servem como base para outras
classes.
Características
● Podem conter atributos e construtores
● Podem ter métodos concretos e abstratos
● Podem estender outras classes abstratas
● NÃO podem ser instanciadas (erro de compilação)
Propósito
Servir como base para outras classes e conter métodos que podem ou não ser
implementados pelas subclasses.
Exemplo
public abstract class Animal {
protected String nome;
public Animal(String nome) {
this.nome = nome;
}
// Método concreto
public void dormir() {
System.out.println(nome + " está dormindo");
}
// Método abstrato - deve ser implementado pelas subclasses
public abstract void emitirSom();
}
public class Cachorro extends Animal {
public Cachorro(String nome) {
super(nome);
}
@Override
public void emitirSom() {
System.out.println("Au au!");
}
}
8. Modificadores de Acesso
Tipos
● public: Acessível de qualquer lugar
● protected: Acessível na mesma classe, subclasses e mesmo pacote
● private: Acessível apenas dentro da mesma classe
● default (sem modificador): Acessível apenas no mesmo pacote
Uso Recomendado
● Atributos: Geralmente private para garantir encapsulamento
● Métodos públicos: Para interface da classe
● Métodos auxiliares: private se usados apenas internamente
9. Modificador Final
Aplicações
● Classes final: Não podem ser estendidas (herdadas)
● Métodos final: Não podem ser sobrescritos
● Atributos final: Constantes (valor não pode ser alterado após inicialização)
Consequências
● Tentar sobrescrever um método final da superclasse gera erro de compilação
● Classes final impedem herança (exemplo: String)
Exemplo
public final class Matematica {
public static final double PI = 3.14159;
public final int somar(int a, int b) {
return a + b;
}
}
// Erro! Não pode estender classe final
// public class MinhaMatematica extends Matematica { }
Resumo dos Conceitos-Chave
1. Encapsulamento: Atributos privados + métodos públicos de acesso
2. Herança: Uma classe pode estender apenas uma outra classe (extends)
3. Polimorfismo: Sobrescrita permite comportamentos diferentes para métodos
herdados
4. Abstração: Classes abstratas definem contratos para subclasses
5. Modificadores: Controlam visibilidade e capacidade de modificação
6. Construtores: Inicializam objetos, criados automaticamente se não definidos
7. Sobrecarga vs Sobrescrita: Parâmetros diferentes vs mesmo método herdado
Dicas Importantes para a Prova
● Lembre-se das regras de sobrescrita (mesma assinatura)
● Entenda quando usar cadamodificador de acesso
● Saiba identificar problemas de compilação relacionados a herança
● Compreenda a diferença entre comparar objetos com == e equals()
● Memorize que Java não suporta herança múltipla de classes
● Entenda o papel do construtor padrão automático