Você está na página 1de 10

DESENVOLVIMENTO PARA

DISPOSITIVOS MÓVEIS

Java (parte 2)
HERANÇA

A ideia de herança está associada à características comuns que os descendentes carregam


(herdam) porém, possuindo suas próprias características individuais. Similarmente ao que
ocorre no mundo real, na programação orientada a objetos, uma classe (chamada
Superclasse) define características comuns (atributos e comportamentos) que serão
herdados pelas suas classes filhas (Subclasses).

Formas

Formatos Bidimensionais Formatos Tridimensionais

círculo quadrado triângulo esfera cubo tetraedro

Fonte: adaptado de Deitel –Java como Programar


HERANÇA

Por que herança é boa em Programação Orientada a Objetos?

• Porque ela permite que o código escrito em uma classe possa ser
automaticamente aproveitado em outras classes.

• Porque novas subclasses poderão trabalhar sobre códigos bem definidos e


testados em uma superclasse definida anteriormente.

• Porque é uma das maneiras que nos permite trabalhar com polimorfismo.
CONSIDERAÇÕES SOBRE HERANÇA
(modificadores e os métodos get/set)
Quando criamos uma subclasse de uma super classe em
public class Agenda{ Java, todos os seus membros são herdados. Membros
public e protected estão automaticamente acessíveis
private String nome;
(variáveis e métodos), já os membros private não são
public Agenda (String nome){ acessíveis diretamente pela subclasse. Assim, variáveis
this.nome = nome ; construtor de instância que normalmente são private terão seus
}
---algum código----
valores acessíveis somente através de métodos public
get/set disponibilizados pela super classe.
public String getNome() {
---algum código----

return nome;
Método “get”
}

public void setNome(String nome) {


---algum código----
Método “set”
this.nome = nome;
}
}
CONSIDERAÇÕES SOBRE HERANÇA (declaração
de herança e do construtor da super classe)
public class Contato extends Agenda {
Obs. Caso o construtor não seja declarado
private String telefone; explicitamente através da palavra super, o
compilador tentará inicializar as variáveis herdadas
public Contato ( String nome, String telefone) Construtor
através do construtor padrão (construtor vazio). Caso
da subclasse a super classe tenha um construtor declarado de
{
(uso do forma explícita, e não possa ter sua variáveis
super(nome); super) inicializadas com o construtor vazio, será gerado um
this.telefone = telefone; erro de compilação.
}

A sintaxe utilizada na linguagem Java para informar que uma


classe é uma subclasse de uma dada superclasse é através do
uso da palavra “extends”. O construtor que inicializa as
variáveis de instância na superclasse também é herdado, e
deve ser declarado explicitamente através da expressão super
(lista de variáveis de instâncias herdadas) dentro do construtor
da subclasse, a menos que a superclasse utilize o construtor
padrão (construtor vazio).
POLIMORFISMO

O polimorfismo possibilita tratar “semelhantes” de uma mesma maneira,


permitindo “programar no geral”, ao invés de “programar no específico”.

Combatente

Artilheiro Infante Cavaleiro


Superclasse
Combatente Inst Var 1
Inst var 2
Inst var L

Method1
.
Combatente soldado1 = new Combatente(); .
Method N

relação “é um” Objeto subclasse


Objeto superclasse
Combatente soldado3 = new Artilheiro();
Inst Var 1
Subclasse
Inst var 2
Artilheiro
Inst var L
Inst var L+1
Variável de Objeto de Intt var L+2
superclasse subclasse
Method1
.
.
Method N
Method N+1
Combatente soldado3 = new Artilheiro(); Method N+2
Superclasse Método System.out.println(
Superclasse
abrirFogo() “AbrirFogo");
Combatente
Combatente

System.out.println
( “Tiro de Canhão);
Subclasse
Subclasse @override
Artilheiro
Artilheiro (1)
abrirFogo()
Combatente soldado1 = new Cavaleiro();
Combatente soldado2 = new Artilheiro();
Combatente soldado3 = new Cavaleiro();
System.out.println
(“Tiro de Morteiro");
Subclasse
Subclasse @override
Cavaleiro
Cavaleiro (2)
abrirFogo()
soldado1.abrirFogo();
soldado2.abrirFogo();
soldado3.abrirFogo();
System.out.println
@override (“Tiro de Fuzil");
subclasse
Subclasse (3)
Tiro de Morteiro! Infante
Infante abrirFogo()
Tiro de Canhão!
Tiro de Fuzil!
INTERFACES
O uso de interfaces é um outro mecanismo que nos possibilita realizar processamento
polimórfico, porém sem a necessidade de uma estrutura de hierarquia de herança entre
classes.
Uma interface é basicamente um “contrato” que especifica um conjunto de ações
(métodos abstratos) que uma classe que implementa a(s) interface(s) terá que possuir,
porém sem especificar a maneira como o método será executado (métodos abstratos
não possuem um corpo de instruções). Uma interface pode ainda definir constantes
acessiveis aos objetos.

Obs. Se uma superclasse implementar uma interface, então


todas as subclasse obrigatoriamente herdam aquela interface,
e precisarão implementar os métodos definidos na interface.

Obs. Tanto os métodos como as constantes de uma interface


são sempre públicos.
DESENVOLVIMENTO PARA
DISPOSITIVOS MÓVEIS

Java (parte 2)

Você também pode gostar