Você está na página 1de 34

Programao OO

em Java
Profa Andra Schwertner Charo
DELC/CT/UFSM

Sumrio
Herana

Visibilidade de atributos e mtodos


Extenso e sobreposio
Uso de super
Referncias para objetos

Polimorfismo

Conceitos
Exemplo

Herana
"Um dia tudo isso ser seu..."

Herana
Inspirao no mundo real
Pais transmitem aos filhos suas caractersticas

e comportamento

Herana e POO
Permite criar classes que aproveitam atributos

e mtodos de classes existentes


Motivao:

reutilizao de cdigo
com flexibilidade

Usos:

especializao
extenso
sobreposio

Herana
Exemplo: classe Pessoa (existente)

Pessoa
nome
rg
getNome()
mostra()

Herana
Novas classes: Estudante e Professor

Pessoa
nome
rg
getNome()
mostra()
Estudante

Professor

curso

departamento
ferias

mostra()

marcaFerias()
mostra()

Herana

Super-classe
(classe-pai, classe-me,
classe-base)

Terminologia

Pessoa
nome
rg
getNome()
mostra()

Classe derivada
(sub-classe)

Professor

Estudante
curso
mostra()

Classe derivada
(sub-classe)

Estudante e
Professor
so
especializaes
de Pessoa

departamento
ferias
marcaFerias()
mostra()

Herana
Atributos so herdados

Pessoa

Estudante e Professor
herdam atributos
(nome e rg)
de Pessoa

nome
rg
getNome()
Atributos
de Estudante:
mostra()
Estudante
curso
mostra()

nome
rg
curso

atributos nome e rg esto


implcitos
devido
Professor
herana

departamento
ferias
marcaFerias()
mostra()

Herana
Mtodos (funcionalidades) so herdados
Estudante e Professor
herdam funcionalidades
de Pessoa

Funcionalidades
de Estudante:
getNome()
mostra()

Estudante
curso
mostra()

Pessoa
nome
rg
getNome()
mostra()
mtodo getNome() est
implcito devido herana
mtodo mostra() de
Estudante sobrepe
(override) o mtodo
mostra() de Pessoa()

Professor
departamento
ferias
marcaFerias()
mostra()

Herana
Novas classes: Estudante e Professor
Estudante e Professor
herdam funcionalidades
de Pessoa

Estudante
curso
mostra()

Pessoa
nome
rg
getNome()
mostra()
Funcionalidades
de Professor:
getNome()
marcaFerias()
mostra()

mtodo marcaFerias()
uma funcionalidade
somente de Professor

Professor
departamento
ferias
marcaFerias()
mostra()

Herana e UML
Diagrama de classes

Herana e UML
Diagrama de classes

Herana em Java
Usa palavra-chave extends na declarao das

sub-classes
classSuperClasse{
privateintapriv;
publicintapub;
privatevoidmetpriv();
publicvoidmetpub();
}
classSubClasse
extendsSuperClasse{
}

Visibilidade de atributos e mtodos


Atributos e mtodos pblicos da super-classe

podem ser acessados normalmente nas subclasses


O cdigo abaixo um exemplo disso:

SubClasseobj=newSubClasse();
obj.apub=99;
obj.metpub();

Visibilidade de atributos e mtodos


Atributos e mtodos privados da super-classe

no podem ser acessados nas sub-classes


O cdigo abaixo vai dar erro de compilao:

SubClasseobj=newSubClasse();
obj.apriv=10;
obj.metpriv();

Exemplo: Pessoa e Estudante

Exemplo: Pessoa e Estudante

Construtor de Pessoa
invocado
implicitamente

Exemplo: Pessoa e Estudante

Mtodo setNome()
herdado de Pessoa

Exemplo: Pessoa e Estudante

Mtodo mostra()
deve mostrar
nome e curso

Exemplo: Pessoa e Estudante

Mas nome atributo


privado
de Pessoa!!!

Mtodo mostra()
deve mostrar
nome e curso

Uso de super (1)


Referncia para objeto da super-classe (para

acessar seus atributos/mtodos)

Veja isso em:


http://download.oracle.com/javase/tutorial/java/IandI/super.html

Uso de super (2)


Para invocar explicitamente um construtor da

super-classe
Deve estar na primeira linha do construtor da

sub-classe

Veja isso em:


http://download.oracle.com/javase/tutorial/java/IandI/super.html

Visibilidade protected
Atributos e mtodos protected da super-

classe podem ser acessados nas sub-classes,


mas no so acessveis a outras classes

Atributo nome
acessado
normalmente

Sobrescrita ou extenso de mtodos


Mtodos da super-classe podem ser estendidos

ou sobrescritos nas sub-classes

Mtodo mostra()
de Estudante
estende o mtodo
mostra() de Pessoa

Sobrescrita ou extenso de mtodos


Mtodos da super-classe podem ser estendidos

ou sobrescritos nas sub-classes


Mtodo mostra()
de Estudante
sobrescreve o mtodo
mostra() de Pessoa

Mais sobre herana em Java


Ao contrrio de C++, Java no permite herana

mltipla
Em Java, todas as classes derivam

(implicitamente) da classe Object


A classe Object possui alguns atributos e

mtodos teis:

toString(): retorna uma string representando o objeto


clone(): cria e retorna uma cpia do objeto
etc.

Sobrescrita do mtodo toString


classPessoa{
privateStringnome;
...
StringtoString(){
returnnome;
}
}
classPessoaApp{
publicstaticvoidmain(String[]args){
Pessoap=newPessoa("Joao");
System.out.println(p);
}
}

Uso de this
Referncia para o objeto corrente
Pode ser usado para invocao explcita de um

construtor
"this" no tem
nada a ver com
herana,
mas assemelha-se a
"super"
em seu uso

classRelogio
{
privateinthora,minuto;
Relogio(inthora,intminuto)
{
this.hora=hora;
this.minuto=minuto;
}
Relogio()
{
this(0,0);
}
}

Veja isso em:


http://download.oracle.com/javase/tutorial/java/javaOO/thiskey.html

Herana e referncias para objetos


Uma referncia para a super-classe pode

apontar para um objeto da sub-classe


O contrrio no verdadeiro
"Todo estudante uma pessoa, mas nem toda

pessoa estudante"
Pessoap;
Estudantee=newEstudante();
p=e;
//e=p;//Errado!

Polimorfismo
Significa: muitas formas
Um nico nome de mtodo, vrias

implementaes
Sobrecarga (overloading) e sobrescrita

(override) so exemplos de polimorfismo


Exemplos recm vistos:

mtodo toString()
mtodo mostra()
mtodos construtores

Qual mtodo ser invocado?


classTesteVinculacaoDinamica
{
publicstaticvoidmain(String[]args)
{
Pessoarefp;
Estudanterefe;
Pessoap=newPessoa("Maria");
Estudantee=newEstudante("Jose","Direito");
//refe=p;//invalido
refp=e;
refp.mostra();
refp=p;
refp.mostra();
}
}

Qual mtodo ser invocado?


classTesteVinculacaoDinamica
{
publicstaticvoidmain(String[]args)
{
Pessoarefp;
Estudanterefe;
Pessoap=newPessoa("Maria");
Estudantee=newEstudante("Jose","Direito");
Mtodo mostra()
//refe=p;//invalido
de Estudante

refp=e;
refp.mostra();
refp=p;
refp.mostra();
}
}

Mtodo mostra()
de Pessoa

Polimorfismo dinmico
O exemplo do slide anterior ilustra

polimorfismo dinmico
Vinculao dinmica (dynamic binding):

mtodo a ser chamado determinado em


tempo de execuo
Mecanismo poderoso quando se tem herana e

mtodos com mesmo nome