Anda di halaman 1dari 24

APOO

Aula 1.3 Herana, Sobreposio e


Polimorfismo e Construtores.
Prof. Bruno Moreno
bruno.moreno@ifrn.edu.br
A classe Object
Todas as classes de Java herdam de Object;
A herana implcita
No necessrio colocar extends Object na
definio da classe;
Contm apenas mtodos genricos
Esses mtodos devem ser reimplementados;
Exemplos:
equals, toString, hashCode.

2
Herana
Campos no privados de uma superclasse podem ser utilizados
diretamente;
Campos privados da superclasse s podem ser usados atravs
dos mtodos oferecidos pela superclasse
Mtodos gets e sets (encapsulamento);
Construtores da superclasse podem ser utilizados atravs da
palavra super;
Somente os Construtores da superclasse imediata podem ser
utilizados diretamente;
Mtodos da superclasse que no sejam privados podem ser
utilizados diretamente;
Mtodos sobrepostos da superclasse que no sejam privados
podem ser utilizados atravs da palavra super.

3
Herana
Funcionario.java
publicclassFuncionarioextendsPessoa{
privateDataadmissao;
privatefloatsalario;

Funcionario(Stringn,intid,Datanasc,Dataadm,
floatsal){
super(n,id,nasc);
admissao=adm;
salario=sal;
}

publicStringtoString(){
returnsuper.toString()+"\nDatadeadmisso:"
+admissao+"\n"+"Salrio:"+salrio;
}

finalpublicfloatqualSalrio(){
returnsalrio;
}
}//fimdaclasseFuncionario
4
Sobreposio
Sobreposio de campos:
Um campo declarado na subclasse oculta o campo
de mesmo nome da superclasse;
Sobreposio de mtodos:
Mtodo herdado pode no ser adequado para os
objetos das subclasses;
Um mtodo declarado na subclasse oculta o mtodo
com a mesma assinatura declarado na superclasse;
Mtodo da superclasse, se no for privado,
pode ser invocado atravs da palavra super;

5
Herana
Empresa.java
publicclassEmpresa{

publicstaticvoidmain(String[]args){
floats;inti;
Datad1=newData((byte)12,(byte)12,(short)1967);
Pessoap=newPessoa("Denise",3454637,d1);
Datad2=newData((byte)1,(byte)12,(short)1972);
Datad3=newData((byte)1,(byte)12,(short)2002);
i=p.qualIdentidade();
Funcionariof1=newFuncionario("Rogerio",
93452128,d2,d3,(float)1000.00);
s=f1.qualSalrio();
i=f1.qualIdentidade(); Instncias de classes diferentes,
System.out.println(f1); chamando um mtodo nico.
}
}

6
Herana
EmpresaDin.java
publicclassEmpresaDin{

publicstaticvoidmain(String[]args){
floats;inti;
Datad1=newData((byte)12,(byte)12,(short)1967);
Pessoap=newPessoa("Denise",3454637,d1);
Datad2=newData((byte)1,(byte)12,(short)1972);
Datad3=newData((byte)1,(byte)12(short)2002);
Funcionariof1=newFuncionario(Rogerio,
457928,d2,d3,(float)1000.00)
p=f1;
System.out.println(p); Referncia de Pessoa passa a
} apontar para instncia de Funcionrio
}

Qual mtodo toString invocado? De


Pessoa ou de Funcionrio?

7
Sobreposio
Sobreposio de mtodos:
Um mtodo public de uma subclasse no pode sobrepor
um mtodo private de uma superclasse;
Um mtodo private de uma subclasse no pode sobrepor
um mtodo public de uma superclasse;
Um mtodo esttico no pode ser sobreposto;
Um mtodo final herdado pelas subclasses, mas no
pode ser sobreposto
Classes declaradas como final: tem todos os mtodos
final
No pode ter subclasses;
Este mecanismo utilizado para evitar herana!

8
Polimorfismo
Permite que uma operao receba argumentos
de diferentes tipos;
Um parmetro declarado como valor de um tipo
pode receber valores do subtipo;
Permite que um mtodo receba argumentos de
diferentes classes
Um parmetro declarado como instncia da
superclasse pode receber instncias da subclasse.

9
O mtodo main

10
O mtodo main
o ponto de entrada de um projeto
Todo o sistema executado atravs da classe que
contm o mtodo main;
Sintaxe:
public static void main(String[] args)
main: no String[] args:
retorna nada; o mtodo
public: indica
pode receber
que pode ser
static: pode ser diversos
utilizado por
chamado sem que argumentos.
qualquer classe;
seja criado um
objeto da classe.
11
O mtodo main
Recomenda-se que a classe que o contem no
tenha nenhum outro mtodo;
publicclassDemoData1{

publicstaticvoidmain(String[]args){
Datahoje=newData();
Dataamanh=newData();

hoje.inicializaData((byte)5,(byte)5,(short)2016);
hoje.mostraData();
amanh.inicializaData((byte)6,(byte)5,(short)2016);
amanh.mostraData();
amanh.mes=10; O que ocorre aqui?

}//fimdomtodomain
}//fimdaclasseDemoData

12
O mtodo main
Analisando detalhes...
publicclassDemoData2{

publicstaticvoidmain(String[]args){
Datahoje,d;
hoje=newData();
hoje.inicializaData((byte)5,(byte)5,(short)2016);
d=hoje; O que ocorre aqui?
hoje.mostraData();
d.mostraData();

Dataamanh=newData();
amanh.inicializaData((byte)6,(byte)5,(short)2016);
amanh.mostraData();

}//fimdomtodomain
}//fimdaclasseDemoData

13
O mtodo main
Analisando detalhes...
publicclassDemoData3{

publicstaticvoidmain(String[]args){
Datahoje,d;
hoje=newData();
hoje.inicializaData((byte)5,(byte)5,(short)2016);
d.inicializaData((byte)5,(byte)5,(short)2016);
hoje.mostraData();
d.mostraData();
O que ocorre aqui?
Dataamanh=newData();
amanh.inicializaData((byte)6,(byte)5,(short)2016);
amanh.mostraData();

}//fimdomtodomain
}//fimdaclasseDemoData

14
O mtodo main
Analisando detalhes...
publicclassDemoData3{

publicstaticvoidmain(String[]args){
Datahoje=newData();
Datad=null;
hoje.inicializaData((byte)5,(byte)5,(short)2016);
d.inicializaData((byte)5,(byte)5,(short)2016);
hoje.mostraData();
d.mostraData();
O que ocorre aqui?
Dataamanh=newData();
amanh.inicializaData((byte)6,(byte)5,(short)2016);
amanh.mostraData();

}//fimdomtodomain
}//fimdaclasseDemoData

15
Tipos de erros (bugs)
Erros de compilao
Erros do compilador
Impedem o programa de executar
Geralmente, so causados ao digitar o cdigo
Exemplo
public class AloMundo {

public static void main(String args[]){ A varivel j


for (int i = 0; i < 10; i++) { no foi
j = i+1;
} declarada.
}
}

16
Tipos de erros (bugs)
Erros em tempo de execuo
Ocorrem quando o programa executado
O programa tenta executar uma operao impossvel
Exemplo

public class AloMundo {

public static void main(String args[]){


Scanner entrada = new Scanner(System.in);
E se divisor
int dividendo = entrada.nextInt(); for igual a 0?
int divisor = entrada.nextInt();
System.out.println(dividendo/divisor);
}
}

17
Tipos de erros (bugs)
Erros lgicos
Erros que impedem seu programa fazer o que
deveria fazer
O cdigo foi compilado e executado sem erros,
mas produz um resultado no esperado
class Conta {
int numero;
Cliente titular;
double saldo;
double limite; Qual o erro lgico da
// .. classe Conta?
void saca(double quantidade) {
saldo = saldo - quantidade;
}
}

18
Tipos de erros (bugs)
Erros lgicos
Erros que impedem seu programa fazer o que
deveria fazer
O cdigo foi compilado e executado sem erros,
mas produz um resultado no esperado
class Conta { O mtodo saca permite
int numero;
Cliente titular; sacar mesmo que o limite
double saldo; tenha sido atingido.
double limite;
// ..
void saca(double quantidade) {
saldo = saldo - quantidade;
}
}

19
Mtodos Construtores
So mtodos especiais invocados no momento da
criao de instncias;
Tm o nome da classe, respeitando-se maisculas e
minsculas;
So mtodos que no retornam valor (nem mesmo
void);
So declarados sem tipo de retorno;
O mtodo construtor o primeiro mtodo que um objeto
executa
Garante a inicializao correta da instncia.
invocado por meio da palavra-chave new;

20
Mtodos Construtores
Por default, toda classe tem um construtor vazio
Caso algum construtor seja criado, o construtor default
deixa de existir;
Construtor padro
Inicializa os dados da instncia com o valor padro de
cada tipo;
Tipos nativos:
boolean: false;

char: espao;

Tipos nmericos: zero;
Objetos: null.

21
Mtodos Construtores
Exemplo:
Datad=newData();

Declarao da
Invocao do
referncia para a
construtor Data();
classe Data

Associao da Criao da
referncia instncia instncia.

22
Mtodos Construtores
Garantem a inicializao correta da instncia;
Por exemplo: na classe Data que mostramos
na Aula 1.1, foi apresentado o seguinte
construtor:
publicData(intd,intm,inta){
if(dataEhValida(d,m,a)){
dia=d;
mes=m;
ano=a;
}else{
dia=0;
mes=0;
ano=0;
}
}

23
Deus amou tanto o mundo que deu
seu Filho, seu nico filho, pela
seguinte razo: para que
ningum precise ser condenado; para
que todos, crendo nele, possam ter
vida plena e eterna.
Joo 3:16
(A Mensagem)

24

Anda mungkin juga menyukai