AULA 08
MÓDULO 2
herança e interfaces
⏱ 55 min
Herança e Interfaces
extends: herança única com IS-A. implements: contratos múltiplos com CAN-DO. @Override. super(). Consumir API HTTP com HttpClient Java 11+.
extendsimplements@OverridesuperinterfaceHttpClientprotected
Herança — IS-A em Java
Herança modela relações IS-A: Gerente É UM Funcionario. A subclasse herda atributos e métodos da superclasse e pode adicionar e sobrescrever comportamento.
herança múltipla não existe em Java
Java não tem herança múltipla de classes — o problema do diamante. A solução são interfaces: você pode implementar quantas quiser.1
extends Funcionario — Gerente herda nome, cpf e os métodos de Funcionario
2
super(nome, cpf) — Chama o construtor da superclasse — obrigatório antes de usar this
3
@Override — Anota que o método sobrescreve da superclasse. Sem isso, Java não avisa se você errar o nome.
4
protected — Atributos protected: acessíveis na classe e subclasses, mas não fora da hierarquia
Interfaces — CAN-DO
Interface define um contrato: todo implementador garante aquele conjunto de métodos. Permite que objetos não relacionados por herança compartilhem comportamento.
Classe abstrata
É UM tipo de algo.
Pode ter implementação parcial.
Uma só por herança.
Tem estado (atributos).
Pode ter implementação parcial.
Uma só por herança.
Tem estado (atributos).
Interface
É CAPAZ DE algo.
Contrato puro (default methods: exceção).
Várias por classe.
Sem estado.
Contrato puro (default methods: exceção).
Várias por classe.
Sem estado.
Consumindo API HTTP com Java
O HttpClient do Java 11+ usa interfaces para modelar requests e responses — é o exemplo mais concreto de contrato real. Vamos consumir uma API de CEP para demonstrar.
conexão com Redes de Computadores
Você está estudando HTTP, TCP/IP e camadas OSI em Redes 1. HttpClient implementa exatamente essas camadas. request() encapsula toda a comunicação TCP+HTTP — você só define o contrato (URL, método, headers).
java
// Herança em Java public class Funcionario { protected String nome; protected String cpf; public Funcionario(String nome, String cpf) { this.nome=nome; this.cpf=cpf; } public String toString() { return nome; } } public class Gerente extends Funcionario { private String departamento; public Gerente(String nome, String cpf, String dep) { super(nome, cpf); // OBRIGATÓRIO — antes de usar this this.departamento = dep; } @Override public String toString() { return super.toString() + " [Gerente/" + departamento + "]"; } } // Interface + implementação public interface Rastreavel { String getLocalizacao(); // contrato puro } public class Veiculo implements Rastreavel { private String placa, lat, lon; public String getLocalizacao() { return lat + "," + lon; } } // HttpClient — consumir API de CEP (Java 11+) HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://viacep.com.br/ws/01001000/json/")) .GET() .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); // 200 System.out.println(response.body()); // JSON do endereço
quiz · aula 08
Teste seus conhecimentos em Java
0/3 respondidas
QUESTÃO 01
Qual é a diferença entre extends e implements em Java?
QUESTÃO 02
Por que @Override é importante mesmo sendo opcional?
QUESTÃO 03
Interface é mais adequada quando...
0/3