Sunteți pe pagina 1din 143

Universo

Java

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 1


Galxia
JSE
Java Standard
Edition
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 2
Constelao
Programao
orientada a objetos

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 3


Tpicos

Parte I Introduo Programao Orientada a Objetos

Parte II Classes e objetos

Parte III Herana e interfaces

Parte IV Tipos enumerados e annotations

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 4


Tpicos

Parte I Introduo Programao Orientada a Objetos

Parte II Classes e objetos

Parte III Herana e interfaces

Parte IV Tipos enumerados e annotations

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 5


Parte III
Herana e
interfaces

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 6


Tpicos

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

Classes e mtodos abstratos

Hora de praticar

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 8


Tpicos

Questes de concursos

Interfaces

Hora de praticar

Questes de concursos

Interfaces e classes abstratas

Questes de concursos

Operador instanceof

Questes de concursos

Respostas dos desafios

Referncias

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 9


Desafios

[RGA] A linguagem Java suporta a herana mltipla.


[CERTO/ERRADO]

[RGA] Na ausncia de qualquer outra superclasse explcita,


cada classe implicitamente uma subclasse de Object.
[CERTO/ERRADO]

[RGA] Na linguagem Java, uma subclasse herda todos os


membros acessveis de sua superclasse, inclusive os
construtores desta. [CERTO/ERRADO]

[RGA] Subclasse no mesmo pacote da sua superclasse herdar


da superclasse os membros com os nveis:

[RGA] Subclasse em pacote diferente da sua superclasse


herdar da superclasse os membros com os nveis:

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 10


Desafios

[RGA] A subclasse tambm herda os membros privados da sua


superclasse. [CERTO/ERRADO]

[RGA] O que so mtodos sobrescritos?

[RGA] Quando acontece um mtodo ocultado?

[RGA] Um mtodo pblico de uma superclasse pode ser


sobrescrito em uma subclasse como protected.
[CERTO/ERRADO]

[RGA] Um mtodo de instncia de uma superclasse pode ser


sobrescrito em uma subclasse como mtodo esttico.
[CERTO/ERRADO]

[RGA] O que casting implcito de objetos? E o que casting


explcito?

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 11


Desafios

[RGA] Quando acontece a ligao prematura? E a tardia?

[RGA] Quais so os casos na linguagem Java que no


acontecem a ligagao tardia?

[RGA] Quando um atributo de uma subclasse oculta um


atributo de sua superclasse?

[RGA] Quais so as formas de evitar herana?

[RGA] Uma classe abstrata deve ter todos seus mtodos


abstratos. [CERTO/ERRADO]

[RGA] Todos os mtodos de uma interface so


automaticamente public. [CERTO/ERRADO]

[RGA] As interfaces fornecem uma alternativa para herana


mltipla na linguagem de programao Java. [CERTO/ERRADO]

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 12


Desafios

[RGA] Quais os tipos um objeto pode ter?

[RGA] Todas as variveis em uma interface so implicitamente:

[RGA] Todos os mtodos declarados em uma interface so


implicitamente:

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 13


Introduo herana

Na linguagem Java, as classes podem ser derivadas de outras


classes

Herdando, assim, campos e mtodos dessas classes

Exemplo:
public class Subclasse extends Superclasse {

Atributos e mtodos adicionados
}

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

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 16


Introduo herana

A subclasse herda todos os membros acessveis de sua


superclasse:

Atributos

Mtodos

Classes aninhadas

Construtores no so membros de uma classe



Construtores da superclasse:
No so herdados por subclasses
Podem ser chamados a partir da subclasse

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 17


Herana de membros

Subclasse no mesmo pacote da sua superclasse herdar da


superclasse os membros com os nveis:

public

protected

default

Subclasse em pacote diferente da sua superclasse herdar da


superclasse os membros com os nveis:

public

protected

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 18


Herana de membros

A subclasse no herda os membros privados da sua


superclasse

No entanto, a subclasse pode acessar esses atravs de outros
membros pblicos, protegidos ou padres disponibilizados pela
superclasse para acessar os seus membros privados

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 19


Herana de membros

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;;
}}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 20


Herana e mtodos

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

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 21


Herana e mtodos

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;
}

}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 22


Herana e mtodos

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

Mtodos sobrescritos x mtodos ocultados



A verso do mtodo sobrescrito quando invocado aquela da
subclasse
Pois houve a reescrita do mtodo herdado

A verso do mtodo oculto depende se ele invocado:
Da superclasse
Da subclasse

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 23


Herana e mtodos

Mtodos sobrescritos x mtodos ocultados



Exemplos:
Superclasse:

public class Superclasse {
public static String nomeClasse() {

return "SUPERclasse";
}
public String teste() {

return Instncia da classe Superclasse;
}

}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 24


Herana e mtodos

Mtodos sobrescritos x mtodos ocultados



Exemplos:
Subclasse:

public class Subclasse extends Superclasse {
// Mtodo que ocultou o da superclasse.
public static String nomeClasse() {

return "SUBclasse";
}
// Mtodo que sobrescreveu o da superclasse.
@Override
public String teste() {

return Instncia da classe Subclasse;
}

}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 25


Herana e mtodos

Mtodos sobrescritos x mtodos ocultados



Exemplos:
Classe executvel:

public class Exemplo {
public static void main(String[] args) {

Subclasse variavelSubClasse = new Subclasse();

Superclasse variavelSuperClasse = variavelSubClasse;


System.out.println(Superclasse.nomeClasse());

System.out.println(Subclasse.nomeClasse());

System.out.println(variavelSuperClasse.nomeClasse());

System.out.println(variavelSuperClasse.teste());
}

}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 26


Herana e mtodos

Mtodos sobrescritos x mtodos ocultados



Exemplos:
Resultado da classe executvel:

SUPERclasse

SUBclasse

SUPERclasse

Instncia da classe Subclasse

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 27


Herana e mtodos

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;
}

}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 28


Herana e mtodos

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

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 29


Herana e mtodos

private
private default
default protected
protected public
public

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 30


Herana e mtodos

Mtodo de instncia da Mtodo esttico da


superclasse superclasse

Mtodo de instncia da
Sobrescreve Gera erro de compilao
subclasse

Mtodo de esttico da
Gera erro de compilao Oculta
subclasse

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 31


Questes de concursos
[CESPE 2011 CORREIOS Cargo 3] A respeito da orientao a
objetos, julgue o item subsequente.

[89] Na linguagem de programao Java, um mtodo pblico


da superclasse somente pode ser anulado por um mtodo
pblico da subclasse.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 32


Questes de concursos
[CESPE 2011 CORREIOS Cargo 3] A respeito da orientao a
objetos, julgue o item subsequente.

[89] Na linguagem de programao Java, um mtodo pblico


da superclasse somente pode ser anulado por um mtodo
pblico da subclasse.

Gabarito: ERRADO.

Justificativa da mudana de gabarito:
O termo anular no representa a sobrescrio do mtodo da
superclasse. Por esse motivo opta-se alterao do gabarito do item.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 33


Hierarquia de classes

Object
Object

ContaCorrente
ContaCorrente

ContaPoupanca
ContaPoupanca ContaMovimento
ContaMovimento

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 34


Hierarquia de classes

ContaPoupanca conta = new ContaPoupanca();


ContaPoupanca
ContaPoupanca

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();

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 35


Casting de objetos

Mostra o uso de um objeto de um tipo no lugar de outro tipo


entre os objetos permitidos por herana e implementaes

H dois tipos:

Casting implcito

Casting explcito

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 36


Casting de objetos

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;

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 37


Casting de objetos

Object
Object
Casting
Casting implcito

explcito
Casting explcito
implcito

ContaCorrente
ContaCorrente

Casting
ContaPoupanca
ContaPoupanca ContaMovimento
ContaMovimento

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 38


Casting de objetos

ContaCorrente conta1 = new ContaPoupanca();


ContaPoupanca
ContaPoupanca

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();

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 39


Casting de objetos

ContaPoupanca conta2 = (ContaPoupanca) conta1;

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();

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 40


rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 41
Hora de praticar

constelacao02.parte03

Exemplo01_ContaCorrenteConcreta

constelacao02.parte03.classes.contacorrenteconcreta

ContaCorrente

ContaPoupanca

ContaMovimento

Banco

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 42


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 19]

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 43


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 19]

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 44


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 19]

public class Prog {



public static void main(String args[]) {
C1 a = new C1();
a.f(); // 1.
C2 b = new C2();
b.f(); // 2.
a = b;
a.f(); // 2.
b.g(); // 2.

}

}
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

[A] sequer compila, pois a atribuio a = b (linha 23) est


incorreta por incompatibilidade de tipos.

[B] compila, mas gerado um erro de execuo por


incompatibilidade da atribuio a = b (linha 23).

[C] imprime 1 2 1 1.

[D] imprime 1 2 1 2.

[E] imprime 1 2 2 2.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 46


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

[A] sequer compila, pois a atribuio a = b (linha 23) est


incorreta por incompatibilidade de tipos.

[B] compila, mas gerado um erro de execuo por


incompatibilidade da atribuio a = b (linha 23).

[C] imprime 1 2 1 1.

[D] imprime 1 2 1 2.

[E] imprime 1 2 2 2.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 47


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 61]

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 48


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 61]

package pk1;

public class C1 {

void f() {
// C2 no consegue ver o este mtodo porque default.
System.out.println("C1");

}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 49


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 61]

package pk2; import pk1.C1;

public class C2 extends C1 {



void f() {
// Este mtodo no sobrescreve o f() de C1.
System.out.println("C2");

}

public static void main(String args[]) {
C1 c = new C2();
c.f(); // Acontece erro de compilao, pois c instncia de C1, nesse
caso, reconhece apenas f() de C1 e f() default.

}
} rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 50

Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 61] Analisando o cdigo
acima, verifica-se que o programa

[A] no compila: erro na linha 04 de C2.

[B] no compila: erro na linha 08 de C2.

[C] no compila: erro na linha 09 de C2.

[D] executa e imprime C1.

[E] executa e imprime C2.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 51


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 61] Analisando o cdigo
acima, verifica-se que o programa

[A] no compila: erro na linha 04 de C2.

[B] no compila: erro na linha 08 de C2.

[C] no compila: erro na linha 09 de C2.

[D] executa e imprime C1.

[E] executa e imprime C2.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 52


Polimorfismo

a propriedade de duas ou mais classes derivadas de uma


mesma superclasse responderem a mesma mensagem

Cada uma de uma forma diferente

Ocorre quando uma subclasse redefine um mtodo existente


na superclasse

Mtodos sobrescritos (overriding)

Mtodos sobrecarregados e polimorfismo:



Alguns autores chamam mtodos sobrecarregados de
polimorfismo esttico

Outros no aceitam mtodos sobrecarregados como
polimorfismo
A FCC atualmente segue esses autores

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 53


Polimorfismo

Na linguagem de programao Java, as variveis-objeto so


polimorfas

Elas podem referenciar:
Tanto um objeto do tipo delas
Quanto objetos de qualquer subclasse do tipo das variveis

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 54


rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 55
Hora de praticar

constelacao02.parte03

Exemplo02_TestandoPolimorfismo

constelacao02.parte03.classes

Pessoa

Homem

Mulher

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 56


Questes de concursos
[FCC 2012 MPE/AP Analista Ministerial Tecnologia da
Informao Questo 35] Analise o cdigo das classes a seguir
presentes em um mesmo pacote de um projeto Java:

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 57


Questes de concursos
[FCC 2012 MPE/AP Analista Ministerial Tecnologia da
Informao Questo 35] Com base nos cdigos apresentados e
nos conceitos da orientao a objetos correto afirmar:

[A] No mtodo main da classe Start no possvel instanciar


objetos das classes NewClassA e NewClassB, pois essas
classes no contm um construtor vlido.

[B] Se for digitada a instruo NewClassB c = new


NewClassA(); no mtodo main da classe Start ser instanciado
um objeto da NewClassA.

[C] Se for digitada a instruo NewClassA b = new


NewClassB(); no mtodo main da classe Start ocorrer um
erro, pois no possvel criar um objeto da NewClassA por
meio do construtor da NewClassB.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 58


Questes de concursos
[FCC 2012 MPE/AP Analista Ministerial Tecnologia da
Informao Questo 35] Com base nos cdigos apresentados e
nos conceitos da orientao a objetos correto afirmar:

[A] No mtodo main da classe Start no possvel instanciar


objetos das classes NewClassA e NewClassB, pois essas
classes no contm um construtor vlido.

[B] Se for digitada a instruo NewClassB c = new


NewClassA(); no mtodo main da classe Start no ser
instanciado um objeto da NewClassA.

[C] Se for digitada a instruo NewClassA b = new


NewClassB(); no mtodo main da classe Start no ocorrer um
erro, pois no possvel criar um objeto da NewClassA por
meio do construtor da NewClassB.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 59


Questes de concursos
[FCC 2012 MPE/AP Analista Ministerial Tecnologia da
Informao Questo 35] Com base nos cdigos apresentados e
nos conceitos da orientao a objetos correto afirmar:

[D] A existncia de dois mtodos de mesmo nome na


NewClassA que recebem a mesma quantidade de parmetros
indica que est ocorrendo uma sobrescrita de mtodos.

[E] Por meio de um objeto da NewClassB ser possvel acessar


os mtodos presentes na NewClassA.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 60


Questes de concursos
[FCC 2012 MPE/AP Analista Ministerial Tecnologia da
Informao Questo 35] Com base nos cdigos apresentados e
nos conceitos da orientao a objetos correto afirmar:

[D] A existncia de dois mtodos de mesmo nome na


NewClassA que recebem a mesma quantidade de parmetros
indica que est ocorrendo uma sobrescrita sobrecarga de
mtodos.

[E] Por meio de um objeto da NewClassB ser possvel acessar


os mtodos presentes na NewClassA.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 61


Questes de concursos
[CESPE 2012 ANAC Cargo 4] Acerca da execuo dos trechos de
cdigos referentes linguagem de programao Java, julgue o
item seguinte.

[69] O resultado da classe TestaOut abaixo ser 300.



public class OutTeste {
protected int i = 100;
public int getInteiro() {

return i;
}

}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 62


Questes de concursos
[CESPE 2012 ANAC Cargo 4] Acerca da execuo dos trechos de
cdigos referentes linguagem de programao Java, julgue o
item seguinte.

[69] O resultado da classe TestaOut abaixo ser 300.



public class TestaOut extends OutTeste {
public void process(OutTeste a)
{ a.i = a.i*3; }
public static void main(String[] args) {

OutTeste a = new TestaOut();

TestaOut b = new TestaOut();

b.process(a);

System.out.println( a.getInteiro() );
}

}
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 63
Questes de concursos
[CESPE 2012 ANAC Cargo 4] Acerca da execuo dos trechos de
cdigos referentes linguagem de programao Java, julgue o
item seguinte.

[69] O resultado da classe TestaOut abaixo ser 300.



Gabarito: CERTO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 64


Questes de concursos
[CESPE 2010 MPU Cargo 25] Com relao linguagem Java,
usada para projetar e manipular itens de dados complexos
(objetos), julgue o item.

[137] No cdigo em Java mostrado a seguir, as classes Conta


e Poupanca implementam o polimorfismo dinmico.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 65


Questes de concursos
[CESPE 2010 MPU Cargo 25] Com relao linguagem Java,
usada para projetar e manipular itens de dados complexos
(objetos), julgue o item.

[137] No cdigo em Java mostrado a seguir, as classes Conta


e Poupanca implementam o polimorfismo dinmico.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 66


Questes de concursos
[CESPE 2010 MPU Cargo 25] Com relao linguagem Java,
usada para projetar e manipular itens de dados complexos
(objetos), julgue o item.

[137] No cdigo em Java mostrado a seguir, as classes Conta


e Poupanca implementam o polimorfismo dinmico esttico.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 67


Invocao de mtodos

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

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 68


Invocao de mtodos

Formas:

Ligao tardia (continuao)
Tambm conhecida pelos termos:

Dynamic binding

Run-time binding

Virtual Method Invocation

Na linguagem de programao Java, todas as invocaes de


mtodos ocorrem atravs de ligao tardia

Exceto nos casos:
Mtodos declarados como:

private

final

static
Construtores
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 69
Herana e atributos

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

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 70


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 58]

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 71


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 58] Linguagens orientadas a
objeto possuem modificadores de acesso que so palavras-
chaves que costumam limitar ou liberar o acesso a variveis e/ou
mtodos, de forma a implementar o conceito de
encapsulamento. Existem vrios modificadores de acesso em
Java que controlam este acesso, tais como os modificadores
public, private e protected.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 72


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 58] Com base nestes
conceitos, qual ser o resultado obtido se o fragmento de cdigo
acima for includo em uma classe e compilado em linguagem
Java?

[A] Um erro de compilao na linha 10, pois atributos com


modificadores private s podem ser acessados na classe que
os definem.

[B] Um erro de compilao na linha 8, pois atributos com


modificadores public no podem ser redefinidos nas classes
filhas.

[C] Um erro de compilao na linha 7, pois classes que


contm atributos com modificadores de acesso private so
finais, isto , no podem ser extendidas.
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 73
Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 58] Com base nestes
conceitos, qual ser o resultado obtido se o fragmento de cdigo
acima for includo em uma classe e compilado em linguagem
Java?

[A] Um erro de compilao na linha 10, pois atributos com


modificadores private s podem ser acessados na classe que
os definem.

O correto erro de compilao na linha 11

[B] No h Um erro de compilao na linha 8, pois atributos


com modificadores public no podem ser redefinidos nas
classes filhas.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 74


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 58] Com base nestes
conceitos, qual ser o resultado obtido se o fragmento de cdigo
acima for includo em uma classe e compilado em linguagem
Java?

[C] No h Um erro de compilao na linha 7, pois classes que


contm atributos com modificadores de acesso private so
finais, isto , no podem ser extendidas 11.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 75


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 58] Com base nestes
conceitos, qual ser o resultado obtido se o fragmento de cdigo
acima for includo em uma classe e compilado em linguagem
Java?

[D] Uma exceo na linha 11, pois apesar de reconhecer o


atributo b em tempo de compilao, o fato dele ter
modificador de acesso private impede que a classe filha
obtenha seu valor em tempo de execuo.

[E] A compilao bem sucedida do cdigo.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 76


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 58] Com base nestes
conceitos, qual ser o resultado obtido se o fragmento de cdigo
acima for includo em uma classe e compilado em linguagem
Java?

[D] Uma exceo erro de compilao na linha 11, pois apesar


de reconhecer o atributo b em tempo de compilao, o fato
dele ter modificador de acesso private impede que a classe
filha obtenha seu valor em tempo de execuo pois atributos
com modificadores private s podem ser acessados na classe
que os definem.

[E] A compilao no bem sucedida do cdigo.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 77


Palavra-chave super

usado para acessar, da superclasse:



Seus membros
Atributos ocultos da superclasse
Mtodos sobrescritos da superclasse

Seus construtores
Sintaxe:

super();

super(lista de parmetros);
Importante:

Se um construtor da subclasse no chamar explicitamente um
construtor da superclasse, o compilador Java insere automaticamente
uma chamada para o construtor sem argumento da superclasse
Se a superclasse no possui um construtor sem argumento, haver
um erro em tempo de compilao neste caso

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 78


rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 79
Hora de praticar

constelacao02.parte03

Exemplo03_PalavraChaveSuper

constelacao02.parte03.classes

Superclasse

Subclasse

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 80


Evitando herana

Umas das razes para evitar a herana certifica-se que a


semntica no pode ser alterada em uma 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.

[117] Em Java, qualquer mtodo de uma classe pode ser


sobrescrito por mtodos de outra classe.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 82


Questes de concursos
[CESPE 2011 MPE/PI Cargo 6] Julgue o prximo item, a respeito
de linguagens e tecnologias de programao.

[117] Em Java, no qualquer mtodo de uma classe que


pode ser sobrescrito por mtodos de outra classe.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 83


Classe Object

Encontra-se no pacote java.lang

Situa-se no topo da rvore de hierarquia de classes

antecedente de qualquer classe



Diretamente
No necessrio escrever:

public class Classe extends Object

Indiretamente

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 84


Classe Object

Retorno Mtodo Descrio

Object clone() Cria e retorna uma cpia do objeto

boolean equals() Indica se algum outro objeto igual a outro

Chamado pelo garbage collector em um objeto quando a


void finalize() garbage collection determina que no h mais referncias
ao objeto

Class<?> getClass() Retorna a classe em tempo de execuo do objeto

int hashCode() Retorna um valor de cdigo hash para o objeto

Acorda uma nica thread que est esperando no monitor


void notify()
deste objeto
Acorda todas threads que esto aguardando no monitor
void notifyAll()
deste objeto
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 85
Classe Object

Retorno Mtodo Descrio

Retorna uma representao de string do


String toString()
objeto
Faz com que a thread atual esperar at
void wait() que outra thread invoque notify() ou
notifyAll() para este objeto
Faz com que a thread atual esperar at
que outra thread invoque notify() ou
void wait(long timeout)
notifyAll() para este objeto ou at um
determinado perodo de tempo decorrido
Faz com que a thread atual esperar at
que outra thread invoque notify() ou
notifyAll() para este objeto ou at uma
void wait(long timeout, int nanos)
thread interromper a thread atual ou at
uma certa quantidade de tempo real ter
decorrido

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 86


Classes e mtodos abstratos

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

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 87


Classes e mtodos abstratos

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

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 88


Classes e mtodos abstratos

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();

}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 89


Classes e mtodos abstratos

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.
}

}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 90


Classes e mtodos abstratos

Object
Object
Casting
Casting implcito

explcito
Casting explcito
implcito

ContaCorrente
ContaCorrente

Casting
ContaPoupanca
ContaPoupanca ContaMovimento
ContaMovimento

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 91


rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 92
Hora de praticar

constelacao02.parte03

Exemplo04_ContaCorrenteAbstrata

constelacao02.parte03.classes.contacorrenteabstrata

ContaCorrente

ContaPoupanca

ContaMovimento

Banco

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 93


Questes de concursos
[CESPE 2011 CORREIOS Cargo 3] A respeito da orientao a
objetos, julgue o item subsequente.

[88] Uma classe capaz de instanciar um objeto de uma


classe abstrata, para utilizar seus mtodos e manipular seus
atributos.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 94


Questes de concursos
[CESPE 2011 CORREIOS Cargo 3] A respeito da orientao a
objetos, julgue o item subsequente.

[88] Uma classe no capaz de instanciar um objeto de uma


classe abstrata, para utilizar seus mtodos e manipular seus
atributos.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 95


Questes de concursos
[CESPE 2010 SECGEP/PE Cargo 3 Questo 37] Com relao
orientao a objetos, assinale a opo correta.

[A] Em geral, classes abstratas definem um conjunto de


funcionalidades que podem ou no ser especificadas e que
devem estar todas definidas, contendo ao menos um mtodo
concreto.

[B] Uma classe abstrata no pode ser instanciada, de forma


que no h objetos que possam ser construdos diretamente a
partir de sua definio.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 96


Questes de concursos
[CESPE 2010 SECGEP/PE Cargo 3 Questo 37] Com relao
orientao a objetos, assinale a opo correta.

[A] Em geral, classes abstratas definem um conjunto de


funcionalidades que podem ou no ser especificadas e que
devem estar todas definidas, contendo ao menos um no
precisando conter mtodo concreto.

Gabarito: ERRADO.

[B] Uma classe abstrata no pode ser instanciada, de forma


que no h objetos que possam ser construdos diretamente a
partir de sua definio.

Gabarito: CERTO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 97


Questes de concursos
[CESPE 2010 MPU Cargo 25] Com relao linguagem Java,
usada para projetar e manipular itens de dados complexos
(objetos), julgue o item.

[138] No cdigo em Java apresentado a seguir, a tentativa de


execuo da classe Principal resultar em erro, porque o
objeto p1 foi criado utilizando como tipo a classe abstrata
Conta.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 98


Questes de concursos
[CESPE 2010 MPU Cargo 25] Com relao linguagem Java,
usada para projetar e manipular itens de dados complexos
(objetos), julgue o item.

[138] No cdigo em Java apresentado a seguir, a tentativa de


execuo da classe Principal resultar em erro, porque o
objeto p1 foi criado utilizando como tipo a classe abstrata
Conta.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 99


Questes de concursos
[CESPE 2010 MPU Cargo 25] Com relao linguagem Java,
usada para projetar e manipular itens de dados complexos
(objetos), julgue o item.

[138] No cdigo em Java apresentado a seguir, a tentativa de


execuo da classe Principal resultar em erro, porque o
objeto p1 foi criado utilizando como tipo a classe abstrata
Conta.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 100


Questes de concursos
[CESPE 2010 MPU Cargo 25] Com relao linguagem Java,
usada para projetar e manipular itens de dados complexos
(objetos), julgue o item.

[138] No cdigo em Java apresentado a seguir, a tentativa de


execuo da classe Principal no resultar em erro, porque o
objeto p1 foi criado utilizando como tipo a classe abstrata
Conta.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 101


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 59]

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 102


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 59]

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 103


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 59] Analisando o cdigo ao
lado, verifica-se que o programa

[A] compila e executa imprimindo na sada padro C1 duas


vezes.

[B] compila e executa imprimindo na sada padro C2 e C3.

[C] no compila, pois classes abstratas no podem ser


instanciadas.

[D] no compila, pois h incompatibilidade de tipos em


atribuio.

[E] no compila, pois um vetor foi construdo de forma


incorreta.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 104


Questes de concursos
[CESGRANRIO 2010 Petrobrs Analista de Sistemas Jnior
Engenharia de Software Questo 59] Analisando o cdigo ao
lado, verifica-se que o programa

[A] compila e executa imprimindo na sada padro C1 duas


vezes.

[B] compila e executa imprimindo na sada padro C2 e C3.

[C] no compila, pois classes abstratas no podem ser


instanciadas.

[D] no compila, pois h incompatibilidade de tipos em


atribuio.

[E] no compila, pois um vetor foi construdo de forma


incorreta.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 105


Interfaces

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

como se fosse um contrato ou padro



Descrever o que as classes devem fazer
Sem especificar como devem fazer

tambm um tipo de referncia como uma classe



Mas pode conter apenas:
Atributos estticos
Assinaturas de mtodos
Tipos aninhados
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 106
Interfaces

No possuem:

Atributos de instncia

Mtodos implementados

No podem ser instanciadas



Apenas podem ser:
Implementadas por classes
Estendidas por outras insterfaces

Todos os mtodos de uma interface so automaticamente


public

No necessrio usar esse modificador

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 107


Interfaces

No fazem parte de nenhuma hierarquia de classes



Embora as interfaces trabalhem em combinao com elas

Fornecem uma alternativa para herana mltipla na


linguagem de programao Java

Uma classe pode herdar de apenas uma outra classe
Mas pode implementar mais de uma interface

Uma interface pode herdar vrias outras interfaces

Os objetos podem ter vrios tipos:



Tipo de sua prpria classe

Tipos das suas classes ancestrais

Tipos de todas as interfaces que elas implementam

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 108


Interfaces

Object
Object

ExibivelXML
ExibivelXML Persistivel
Persistivel
Casting
Casting implcito

explcito
Casting explcito
implcito

ContaCorrente
ContaCorrente

Casting
ContaPoupanca
ContaPoupanca ContaMovimento
ContaMovimento

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 109


Interfaces

Na declarao de interfaces, temos:



Modificadores de acesso de nvel superior:
public
default

Palavra-chave interface

Nome da interface
Comea com letra maiscula por conveno
A nomeao segue as regras de nomeao de variveis

Lista de nomes das interfaces a serem estendidas
Se houver
A lista precedida pela palavra-chave extends
Os nomes so separados por vrgulas
Uma interface pode estender mais de uma interface
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 110
Interfaces

Na declarao de interfaces, temos:



Corpo da interface
Envolvido por chaves {}
Contm declaraes de mtodos
Pode conter declaraes de variveis finais

Todas as variveis em uma interface so implicitamente:
public
static
final

Esses modificadores podem ser omitidos

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 111


Interfaces

Na declarao de mtodos das interface, temos:



A declarao seguida por um ponto e vrgula

No h chaves {}
No h implementao dos mtodos de interface

Todos os mtodos declarados em uma interface so
implicitamente public
Esse modificador pode ser omitido

Uma classe que implementa uma interface:



Deve implementar todos os mtodos

Pode no implementar todos os mtodos
Ela dever se tornar uma classe abstrata
As suas classes descendentes devem implementar os mtodos

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 112


Interfaces

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);";

}
}

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 113


rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 114
Hora de praticar

constelacao02.parte03

Exemplo05_ContaCorrenteInterfaces

constelacao02.parte03.classes.contacorrenteinterfaces

ContaCorrente

ContaPoupanca

ContaMovimento

Banco

constelacao02.parte03.classes.interfaces

ExibivelXML

Persistivel

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 115


Questes de concursos
[CESPE 2010 SECGEP/PE Cargo 3 Questo 37] Com relao
orientao a objetos, assinale a opo correta.

[C] A sintaxe para a definio de classes diferencia-se da


sintaxe para a declarao de uma interface em razo de o seu
corpo definir apenas assinaturas de mtodos e constantes.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 116


Questes de concursos
[CESPE 2010 SECGEP/PE Cargo 3 Questo 37] Com relao
orientao a objetos, assinale a opo correta.

[C] A sintaxe para a definio de classes diferencia-se da


sintaxe para a declarao de uma interface em razo de o seu
do corpo desta definir apenas assinaturas de mtodos e
constantes.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 117


Questes de concursos
[CESPE 2010 DETRAN/ES Cargo 3] A respeito da orientao a
objetos e das respectivas linguagens de programao, julgue o
item subsequente.

[75] A herana de interfaces consiste no nico caso de


herana mltipla permitida a uma classe em Java, visto que,
em geral, no possvel que uma classe pai tenha o mesmo
nome de mtodo de outra classe pai.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 118


Questes de concursos
[CESPE 2010 DETRAN/ES Cargo 3] A respeito da orientao a
objetos e das respectivas linguagens de programao, julgue o
item subsequente.

[75] A herana de interfaces consiste no nico caso de


herana mltipla permitida a uma classe em Java, visto que,
em geral, no possvel que uma classe pai tenha o mesmo
nome de mtodo de outra classe pai.

Gabarito: CERTO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 119


Questes de concursos
[CESGRANRIO 2012 CMB Assistente Tcnico Administrativo
Programador de Computador] Uma diferena entre classe e
interface que a classe

[A] pode ter um campo de dados, enquanto a interface no.

[B] pode ser implementada em uma interface, enquanto a


interface no pode ser implementada em uma classe

[C] usada apenas em applets, enquanto a interface usada


apenas em aplicativos dedicados.

[D] catalogada em pacotes, enquanto a interface no.

[E] declara e implementa seus mtodos, enquanto a interface


apenas declara.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 120


Questes de concursos
[CESGRANRIO 2012 CMB Assistente Tcnico Administrativo
Programador de Computador] Uma diferena entre classe e
interface que a classe

[A] pode ter um campo de dados, enquanto a interface no.

[B] pode ser implementada em uma interface, enquanto a


interface no pode ser implementada em uma classe

[C] usada apenas em applets, enquanto a interface usada


apenas em aplicativos dedicados.

[D] catalogada em pacotes, enquanto a interface no.

[E] declara e implementa seus mtodos, enquanto a interface


apenas declara.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 121


Questes de concursos
[CESGRANRIO 2012 Petrobrs Tcnico de Explorao de
Petrleo Jnior Informtica] Ao escrever o cdigo da Classe
PortaDeCofre em Java para que ela atenda a interface Porta,
como um programador deve comear a declarao da classe?

[A] public classe Porta:PortaDeCofre {

[B] public classe PortaDeCofre :: Porta {

[C] public classe PortaDeCofre inherits Porta {

[D] public classe PortaDeCofre extends Porta {

[E] public classe PortaDeCofre implements Porta {

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 122


Questes de concursos
[CESGRANRIO 2012 Petrobrs Tcnico de Explorao de
Petrleo Jnior Informtica] Ao escrever o cdigo da Classe
PortaDeCofre em Java para que ela atenda a interface Porta,
como um programador deve comear a declarao da classe?

[A] public classe Porta:PortaDeCofre {

[B] public classe PortaDeCofre :: Porta {

[C] public classe PortaDeCofre inherits Porta {

[D] public classe PortaDeCofre extends Porta {

[E] public classe PortaDeCofre implements Porta {

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 123


Interfaces e classes abstratas

Interfaces Classes abstratas

Podem ser instanciadas No No

Podem estender mais de No podem estender mais


Herana mltipla
uma interface de uma classe

Podem implementar mais


Implementa interfaces No
de uma

Apenas variveis com


Podem ter variveis de
Variveis modificadores public, static
instncia, estticas e finais
e final
Podem conter mtodos
Apenas mtodos pblicos e
Mtodos abstratos, como tambm de
abstratos
instncia e estticos

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 124


Questes de concursos
[CESPE 2010 SECGEP/PE Cargo 3 Questo 37] Com relao
orientao a objetos, assinale a opo correta.

[D] Uma classe abstrata no tem, obrigatoriamente, um corpo


associado, podendo apenas incluir atributos de objetos e
definio de mtodos, pblicos ou no. Uma interface Java,
por sua vez, para que seja abstrata, necessita somente ser
declarada como tal.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 125


Questes de concursos
[CESPE 2010 SECGEP/PE Cargo 3 Questo 37] Com relao
orientao a objetos, assinale a opo correta.

[D] Uma classe abstrata no tem, obrigatoriamente, um corpo


associado, podendo apenas incluir atributos de objetos e
definio de mtodos, pblicos ou no. Uma interface Java,
por sua vez, para que seja abstrata, necessita somente ser
declarada como tal.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 126


Operador instanceof

chamado de operador de comparao de tipo

Testa se um objeto instncia de:



Uma classe

Uma subclasse

Uma classe que implementa uma interface particular

Sintaxe:

objeto instanceof Classe

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 127


Operador instanceof

veiculo
veiculo

Veiculo
Veiculo Carro
Carro Acelerar
Acelerar

carro
carro

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 128


Questes de concursos
[ESAF 2008 CGU Analista de Finanas e Controle
Desenvolvimento de Sistemas Questo 23] Com relao
linguagem de programao Java, correto afirmar que

[A] o operador instanceof utilizado para chamar o mtodo


construtor de uma classe e criar um novo objeto.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 129


Questes de concursos
[ESAF 2008 CGU Analista de Finanas e Controle
Desenvolvimento de Sistemas Questo 23] Com relao
linguagem de programao Java, correto afirmar que

[A] o operador instanceof new utilizado para chamar o


mtodo construtor de uma classe e criar um novo objeto.

Gabarito: ERRADO.

Veiculo veiculo = new Veiculo();

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 130


Questes de concursos
[CESPE 2012 BASA Cargo 17] Julgue o item seguinte, acerca da
linguagem de programao Java.

[99] O operador instanceof s pode ser usado para testar


valores null.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 131


Questes de concursos
[CESPE 2012 BASA Cargo 17] Julgue o item seguinte, acerca da
linguagem de programao Java.

[99] O operador instanceof s pode ser usado para testar


valores null.

Gabarito: ERRADO.

instanceof
chamado de operador de comparao de tipo
Testa se um objeto instncia de:

Uma classe

Uma subclasse

Uma classe que implementa uma interface particular

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 132


Respostas dos desafios

[RGA] A linguagem Java no suporta a herana mltipla.



Gabarito: ERRADO.

[RGA] Na ausncia de qualquer outra superclasse explcita,


cada classe implicitamente uma subclasse de Object.

Gabarito: CERTO.

[RGA] Na linguagem Java, uma subclasse herda todos os


membros acessveis de sua superclasse, inclusive no
incluindo os construtores desta.

Gabarito: ERRADO.

Construtores no so membros de uma classe
Construtores da superclasse:

No so herdados por subclasses

Podem ser chamados a partir da subclasse
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 133
Respostas dos desafios

[RGA] Subclasse no mesmo pacote da sua superclasse herdar


da superclasse os membros com os nveis:

public

protected

default

[RGA] Subclasse em pacote diferente da sua superclasse


herdar da superclasse os membros com os nveis:

public

protected

[RGA] A subclasse tambm no herda os membros privados


da sua superclasse.

Gabarito: ERRADO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 134


Respostas dos desafios

[RGA] O que so mtodos sobrescritos?



So mtodos de instncia herdados que foram reescritos na
subclasse
Alterando o comportamento deles
Substituindo eles

[RGA] Quando acontece um mtodo ocultado?



Um mtodo da subclasse oculta o da superclasse quando o
mtodo esttico da subclasse possui a mesma assinatura da
mtodo esttico da superclasse

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 135


Respostas dos desafios

[RGA] Um mtodo pblico de uma superclasse no pode ser


sobrescrito em uma subclasse como protected.

Gabarito: ERRADO.

O modificador de acesso de um mtodo sobrescrito ou oculto
deve ser igual ou mais liberal ao mtodo da superclasse

[RGA] Um mtodo de instncia de uma superclasse no pode


ser sobrescrito em uma subclasse como mtodo esttico.

Gabarito: ERRADO.

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

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 136


Respostas dos desafios

[RGA] O que casting implcito de objetos? E o que casting


explcito?

Acontece casting implcito quando uma varivel-objeto de uma
classe ancestral referencia um objeto instncia de uma das
classes descendentes da hieraquia

Acontece casting explcito quando uma varivel-objeto de uma
classe descendente referencia um objeto instncia de uma das
classes ancestrais da hieraquia

[RGA] Quando acontece a ligao prematura? E a tardia?



Acontece a ligao prematura quando o mtodo a ser invocado
em tempo de compilao do programa

Acontece ligao tardia quando o mtodo a ser invocado em
tempo de execuo do programa

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 137


Respostas dos desafios

[RGA] Quais so os casos na linguagem Java que no


acontecem a ligagao tardia?

Nos casos:
Mtodos declarados como:

private

final

static
Construtores

[RGA] Quando um atributo de uma subclasse oculta um


atributo de sua superclasse?

Quando o atributo da subclasse possui a mesmo nome da
atributo da superclasse mesmo que sejam de tipos diferentes

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 138


Respostas dos desafios

[RGA] Quais so as formas de evitar herana?



Classes com o modificador final
Torna uma classe impossvel de ser estendida

Mtodos com o modificador final
Torna o mtodo impossvel de ser sobrescrito

[RGA] Uma classe abstrata deve no precisa ter todos seus


mtodos abstratos.

Gabarito: ERRADO.

[RGA] Todos os mtodos de uma interface so


automaticamente public.

Gabarito: CERTO.

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 139


Respostas dos desafios

[RGA] As interfaces fornecem uma alternativa para herana


mltipla na linguagem de programao Java.

Gabarito: CERTO.

[RGA] Quais os tipos um objeto pode ter?



Tipo de sua prpria classe

Tipos das suas classes ancestrais

Tipos de todas as interfaces que elas implementam

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 140


Respostas dos desafios

[RGA] Todas as variveis em uma interface so implicitamente:



public

static

final

[RGA] Todos os mtodos declarados em uma interface so


implicitamente:

public

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 141


Referncias

Apostila Java e Orientao a Objetos da Caelum:


http://www.caelum.com.br/download/caelum-java-objetos-
fj11.pdf

Apostila Java e Orientao a Objetos da K19:


http://www.k19.com.br/downloads/apostilas/java/k19-k11-
orientacao-a-objetos-em-java

HORSTMANN, Cay S. e CORNELL, Gary. Core Java Volume I -


Fundamentos. 8 Edio. Editora Pearson Prentice Hall, 2010.

Interfaces X Classes Abstratas:


http://www.devmedia.com.br/interfaces-x-classes-
abstratas/13337

Orientao a Objetos com Java:


http://www.slideshare.net/regismelo/orientao-a-objetos-
com-java
rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 142
Referncias

Polimorfismo, Classes abstratas e Interfaces: Fundamentos da


POO em Java: http://www.devmedia.com.br/polimorfismo-
classes-abstratas-e-interfaces-fundamentos-da-poo-em-
java/26387

SIERRA, Kate e BATES, Bert. Certificao Sun para


Programador e Desenvolvedor em Java 2 Guia de Estudos. 3
Edio. Editora Alta Books, 2003.

The Java Language Specification - Java SE 7 Edition:


http://docs.oracle.com/javase/specs/jls/se7/html/

The Java Tutorials - Interfaces and Inheritance:


http://docs.oracle.com/javase/tutorial/java/javaOO/

rogerioaraujo.wordpress.com twitter: @rgildoaraujo - rgildoaraujo@gmail.com 143

S-ar putea să vă placă și