Documente Academic
Documente Profesional
Documente Cultură
Java
Desafios
Introduo herana
Herana de membros
Herana e mtodos
Questes de concursos
Hierarquia de classes
Casting de objetos
Hora de praticar
Polimorfismo
Hora de praticar
Questes de concursos
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 7
Tpicos
Invocao de mtodos
Herana e atributos
Questes de concursos
Palavra-chave super
Hora de praticar
Evitando herana
Questes de concursos
Classe Object
Hora de praticar
Questes de concursos
Interfaces
Hora de praticar
Questes de concursos
Questes de concursos
Operador instanceof
Questes de concursos
Referncias
Termos:
Subclasse
uma classe derivada de outra
Tambm chamada de:
Classe derivada
Classe estendida
Classe filha
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 14
Introduo herana
Termos:
Superclasse
a classe base para uma subclasse
Tambm chamada de:
Classe base
Classe me
Classe pai
Classes descendentes
So classes em um nvel inferior em relao a outras em uma
hierarquia de herana de classes onde a classe base da hierarquia
Object
Classes ancestrais
So classes em um nvel superior em relao a outras em uma
hierarquia de herana de classes onde a classe base da hierarquia
Object
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 15
Introduo herana
Herana simples
Na linguagem Java, cada classe tem uma e apenas uma
superclasse direta
Exceto a classe Object que no possui superclasse
Na ausncia de qualquer outra superclasse explcita, cada classe
implicitamente uma subclasse de Object
Todas as classes na linguagem Java so descendentes de Object
Pacote
Pacote 11 Pacote
Pacote 22
public
public class
class AA {{
private
private String
String atributo1
atributo1;; public
public class
class C
C extends
extends A A {{
public
public String
String atributo2
atributo2;; public
public String
String atributo2
atributo2;;
protected
protected String
String atributo3
atributo3;; protected
protected String
String atributo3
atributo3;;
String
String atributo4
atributo4;; }}
}}
class
class BB extends
extends A A {{
public
public String
String atributo2
atributo2;;
protected
protected String
String atributo3
atributo3;;
String
String atributo4
atributo4;;
}}
Mtodos sobrescritos
So mtodos de instncia herdados que foram reescritos na
subclasse
Alterando o comportamento deles
Substituindo eles
Possuem a mesma assinatura que os mtodos herdados
Anotao @Override
usada quando houver a sobrescrita do mtodo herdado
Instruindo o compilador sobre a sobrescrita
Mtodos sobrescritos
Exemplos:
Superclasse:
public class Superclasse {
public int teste(int x) {
return x * 10;
}
}
Subclasse:
public class Subclasse extends Superclasse {
@Override
public int teste(int x) {
return x * 10 + 15;
}
}
Mtodos ocultados
Um mtodo da subclasse oculta o da superclasse quando o
mtodo esttico da subclasse possui a mesma assinatura da
mtodo esttico da superclasse
System.out.println(Superclasse.nomeClasse());
System.out.println(Subclasse.nomeClasse());
System.out.println(variavelSuperClasse.nomeClasse());
System.out.println(variavelSuperClasse.teste());
}
}
Mtodos sobrecarregados
So mtodos da subclasse que possuem mesmos nomes, mas
nmero e tipos de parmetros diferentes dos mtodos da
superclasse
No escondem nem substituem os mtodos da superclasse
So novos mtodos exclusivos para a subclasse
Exemplos:
Subclasse:
public class Subclasse extends Superclasse {
public int teste(int x, int y) {
return x * y * 10 + 15;
}
}
Modificadores
Modificadores de nveis de acesso
O modificador de acesso de um mtodo sobrescrito ou oculto deve
ser igual ou mais liberal ao mtodo da superclasse
Modificador static
Haver erro de compilao se houver a tentativa de mudar:
Um mtodo de instncia na superclasse para um mtodo esttico na
subclasse
Um mtodo esttico na superclasse para um mtodo de instncia na
subclasse
private
private default
default protected
protected public
public
Mtodo de instncia da
Sobrescreve Gera erro de compilao
subclasse
Mtodo de esttico da
Gera erro de compilao Oculta
subclasse
Object
Object
ContaCorrente
ContaCorrente
ContaPoupanca
ContaPoupanca ContaMovimento
ContaMovimento
private
private double
double taxaJuros;
taxaJuros;
private
private double
double correcaoMonentaria;
correcaoMonentaria;
public
public static
static String
String nome();
nome();
public
public void
void extrato();
extrato();
conta
conta ContaCorrente
ContaCorrente
private
private long
long numeroConta;
numeroConta;
private
private double
double saldo;
saldo;
public
public static
static String
String nome();
nome();
public
public void
void extrato();
extrato();
H dois tipos:
Casting implcito
Casting explcito
H dois tipos:
Casting implcito
Quando uma varivel-objeto de uma classe ancestral referencia um
objeto instncia de uma das classes descendentes da hieraquia
Uma classe descendente uma classe ancestral
Exemplo:
Object variavelObjeto = new ContaCorrente();
Casting explcito
Quando uma varivel-objeto de uma classe descendente referencia
um objeto instncia de uma das classes ancestrais da hieraquia
checado em tempo de execuo
Caso haja falha de checagem, lanada uma ClassCastException
Exemplo:
ContaCorrente variavelConta = (ContaCorrente) variavelObjeto;
Object
Object
Casting
Casting implcito
explcito
Casting explcito
implcito
ContaCorrente
ContaCorrente
Casting
ContaPoupanca
ContaPoupanca ContaMovimento
ContaMovimento
private
private double
double taxaJuros;
taxaJuros;
private
private double
double correcaoMonentaria;
correcaoMonentaria;
public
public static
static String
String nome();
nome();
public
public void
void extrato();
extrato();
ContaCorrente
ContaCorrente
conta1
conta1
private
private long
long numeroConta;
numeroConta;
private
private double
double saldo;
saldo;
public
public static
static String
String nome();
nome();
public
public void
void extrato();
extrato();
ContaPoupanca
ContaPoupanca
private
private double
double taxaJuros;
taxaJuros;
conta1
conta1 private
private double
double correcaoMonentaria;
correcaoMonentaria;
public
public static
static String
String nome();
nome();
public
public void
void extrato();
extrato();
ContaCorrente
ContaCorrente
private
private long
long numeroConta;
numeroConta;
private
private double
double saldo;
saldo;
conta2
conta2 public
public static
static String
String nome();
nome();
public
public void
void extrato();
extrato();
constelacao02.parte03
Exemplo01_ContaCorrenteConcreta
constelacao02.parte03.classes.contacorrenteconcreta
ContaCorrente
ContaPoupanca
ContaMovimento
Banco
}
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 45
Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 19] Considerando a execuo
do trecho de cdigo em Java acima, o programa
[C] imprime 1 2 1 1.
[D] imprime 1 2 1 2.
[E] imprime 1 2 2 2.
[C] imprime 1 2 1 1.
[D] imprime 1 2 1 2.
[E] imprime 1 2 2 2.
package pk1;
public class C1 {
void f() {
// C2 no consegue ver o este mtodo porque default.
System.out.println("C1");
}
Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 61] Analisando o cdigo
acima, verifica-se que o programa
constelacao02.parte03
Exemplo02_TestandoPolimorfismo
constelacao02.parte03.classes
Pessoa
Homem
Mulher
Formas:
Ligao prematura
Early binding
Acontece quando o mtodo a ser invocado em tempo de
compilao do programa
Ligao tardia
Late binding
Demonstra um aspecto das caractersticas importantes do
polimorfismo na linguagem Java
Acontece quando o mtodo a ser invocado em tempo de
execuo do programa
A JVM chama o mtodo adequado para o objeto que referenciado
pela varivel-objeto
No chama o mtodo que definido pelo tipo da varivel
Formas:
Ligao tardia (continuao)
Tambm conhecida pelos termos:
Dynamic binding
Run-time binding
Virtual Method Invocation
Atributos escondidos
Um atributo da subclasse oculta o da superclasse quando o
atributo da subclasse possui a mesmo nome do atributo da
superclasse
Mesmo que sejam de tipos diferentes
Usa-se palavra-chave super seguido do nome do atributo da
superclasse para referenci-lo dentro da subclasse depois dele
ser ocultado por essa
Exemplo:
super.nome
Essa prtica desencorajada
Pois dificulta o entendimento do cdigo
constelacao02.parte03
Exemplo03_PalavraChaveSuper
constelacao02.parte03.classes
Superclasse
Subclasse
H duas formas:
Classes com o modificador final
Torna uma classe impossvel de ser estendida
A classe String uma classe final
public final class Classe {
}
Mtodos com o modificador final
Torna o mtodo impossvel de ser sobrescrito
Alguns mtodos da classe Object so final
public final void metodo() {
System.out.println(Texto);
} rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 81
Questes de concursos
[CESPE 2011 MPE/PI Cargo 6] Julgue o prximo item, a respeito
de linguagens e tecnologias de programao.
Classe abstrata
uma classe declarada com o modificador abstract
Pode ou no incluir mtodos abstratos
No pode ser instanciada
Mas pode ter subclasses
Pode ter:
Atributos estticos
Mtodos estticos
Mtodo abstrato
um mtodo declarado:
Com o modificador abstract
Sem uma implementao
Sem chaves
Seguido por um ponto e vrgula
implementado por alguma subclasse da classe abstrata que
contm esse mtodo
Caso uma subclasse no implemente o mtodo abstrato, ela ser
tambm abstrata
Exemplos:
public abstract class ContaCorrente {
// Atributos necessrios.
// Construtores necessrios.
// Mtodos no abstratos necessrios.
// Mtodo abstrato que pode ser implementado pelas subclasses.
public abstract void extrato();
}
Exemplos (continuao):
public class ContaPoupanca extends ContaCorrente {
// Atributos necessrios.
// Construtores necessrios.
// Mtodos no abstratos necessrios.
// Mtodo implementado.
@Override
public void extrato() {
// Implementao do mtodo extrato.
}
}
Object
Object
Casting
Casting implcito
explcito
Casting explcito
implcito
ContaCorrente
ContaCorrente
Casting
ContaPoupanca
ContaPoupanca ContaMovimento
ContaMovimento
constelacao02.parte03
Exemplo04_ContaCorrenteAbstrata
constelacao02.parte03.classes.contacorrenteabstrata
ContaCorrente
ContaPoupanca
ContaMovimento
Banco
No uma classe
um conjunto de requisitos para que classes possam se
adequar a ela
Se a classe estiver em conformidade com uma interface, ento um
determinado servio ser realizado
No possuem:
Atributos de instncia
Mtodos implementados
Object
Object
ExibivelXML
ExibivelXML Persistivel
Persistivel
Casting
Casting implcito
explcito
Casting explcito
implcito
ContaCorrente
ContaCorrente
Casting
ContaPoupanca
ContaPoupanca ContaMovimento
ContaMovimento
Exemplos:
Interface
public interface Persistivel {
String insere();
}
Classe que implementa a interface:
public class Classe implements Persistivel {
@Override
public String insere() {
return "INSERT INTO Tabela VALUES (Valor1, Valor2);";
}
}
constelacao02.parte03
Exemplo05_ContaCorrenteInterfaces
constelacao02.parte03.classes.contacorrenteinterfaces
ContaCorrente
ContaPoupanca
ContaMovimento
Banco
constelacao02.parte03.classes.interfaces
ExibivelXML
Persistivel
Sintaxe:
objeto instanceof Classe
veiculo
veiculo
Veiculo
Veiculo Carro
Carro Acelerar
Acelerar
carro
carro