9. Tipos de variáveis
Declaradas dentro de
um método, inclusive
Locais como parâmetros do
método
Variáveis
Declaradas dentro de
uma classe, mas não
Instância dentro de um
método
10. Tipos de variáveis
São inicializadas
automaticamente
Variáveis Precisam ser
locais inicializadas sempre
11. Pilha A pilha e a heap
Na heap residem
os objetos e as
variáveis de
instância
Na pilha residem as
variáveis locais,
referências a objetos
e chamadas a
métodos
Heap
25. Herança
Classe mãe
ou
Super-classe
Classe A
Classe filha
ou
Classe B Sub-classe Conforme os atributos
de visibilidade, a sub-
classe herda as
características da
super-classe
26. Herança – como descobrir ?
Classe A Classe B
B é sub-classe de A ?
isto é,
B estende A ?
Faça o teste:
B é uma A?
27. Herança
Classe A
Super-classes de
C
Classe B Classe G
Sub-classes de Classe C
C
Classe D
Classe F
Classe E
28. A classe Object
É a classe mãe de
todas as outras
classes em Java Object
Classe B
Classe C
Classe D
29. A classe Object
Por exemplo:
• getClass( )
• equals( )
• toString( )
30. Herança e visibilidade
Acesso
permitido
Private Default Protected Public
Mesma classe Sim Sim Sim Sim
Herança
Outra classe, mesmo
Não Sim Sim Sim
pacote
Sub-classe, outro
Não Não Sim Sim
pacote
Fora de sub-classe,
Não Não Não Sim
outro pacote
31. Herança – reutilização de campos
Classe A
Campo 1
...
Campo N
Classe B Classe D
Classe C
32. Herança – reutilização de campos
Classe A Campo 1 Herda os campos
Campo 2 Campo 1
Campo 2
o Campo 3 é novo
Classe B
Campo 3
Podem ser criados campos novos,
inclusive com o mesmo nome. Nesse
caso campo correspondente da super-
classe é ocultado
33. Herança – reutilização de métodos
Classe A
Método 1
...
Método N
Classe B Classe D
Classe C
34. Herança – reutilização de métodos
Sub-classes precisam
implementar apenas
Classe A Método 1 aquilo que acrescentam
Método 2 à super-classe
Classe B
Classe C A Classe C herda o
Método 1 e o Método 2
Método 3 da Classe A e o
Método 3 da Classe B
Método 4
38. Declaração da
classe mãe
public class Pessoa{
protected String nome;
protected String endereco;
...
} palavra-chave Classe
mãe
public class Estudante extends Pessoa {
...
}
Declaração da
classe filha
39. Os construtores
public class Pessoa{ Construtor de
protected String nome; Pessoa
protected String endereco;
public Pessoa(){
System.out.println(“Construtor, a partir
de Pessoa”);
nome = ""; endereco = "";
}
. . . .
}
Construtor de
public class Estudante extends Pessoa {
Estudante
public Estudante(){
System.out.println(“Construtor, a partir
de Estudante”);
}
. . . .
}
40. Chamadas aos construtores Criando
gilberto
um objeto da
public static main( String[] args ) {
classe
Estudante
Estudante gilberto = new Estudante();
}
Construtor, a partir de Pessoa
Construtor, a partir de Estudante
Quando um objeto de uma sub-classe é instanciado,
o construtor default da super-classe,
é invocado implicitamente,
antes do construtor da sub-classe ser invocado
41. A palavra-chave super
Uma sub-classe pode,
também, chamar
explicitamente um
construtor da super-classe
imediatamente superior
Tal chamada resultará na execução
do construtor relevante (aquele
associado aos parâmetros passados)
da super-classe
42. Usando super Passagem dos parâmetros
nome e endereco
de acordo com a assinatura do
construtor da super-classe,
Pessoa
public Estudante(){
super( “Gustavo", “Av. Getúlio Vargas, 300" );
System.out.println(“Construtor de Pessoa,
a partir de Estudante");
}
A chamada a super() precisa ser
o primeiro comando no construtor
A chamada a super() só pode ser
feita a partir de um construtor
43. Usando super
public Student() {
super.nome = “Gustavo”;
super.endereco = “Av. Getúlio Vargas, 300”;
}
Outra forma de usar super é empregar
a sintaxe do . para referenciar os membros
da super-classe ( semelhante a this )
45. Construiremos a seguir
Um exemplo Animal !
um exemplo mais longo,
envolvendo a criação de
objetos, os conceitos de O exemplo envolve três
herança e o de classes no seguinte
polimorfismo (sobre o esquema de herança
método show( ) ).
Demonstraremos também Animal
a utilização de super,
super( ) e this . Cachorro
Cocker
50. A subclasse Cachorro
Cachorro
nome Naturalmente a subclasse
raça Cachorro herda da classe
mãe, Animal, os campos tipo
Cachorro( nome, cor) e cor e pode utilizar os
Cachorro( nome, raça, cor ) métodos show( ) e getCor( )
show( ) definidos na Animal
Eu sou um <tipo> <cor>
<nome> é um <raça>
51. Código da
classe
Cachorro
Chamadas ao
construtor da classe
mãe
Chamada ao método
show( ) da classe mãe
52. A subclasse Cocker Naturalmente a subclasse
Cocker herda da classe mãe,
Cachorro , os campos nome e
Cocker raça e herda da classe avó os
vacina campos tipo e cor
Cocker( nome, cor, vacina)
show( )
O método show( ) exibirá na
tela:
• as mensagens que herda da
classe mãe
• e também uma mensagem Eu sou um <tipo> <cor>
que depende do valor do <nome> é um <raça>
campo vacina
Se vacina = true: Se vacina = false:
Cachorro vacinado ! Vacinar cachorro !
53. Código da
classe
Cocker
Chamada ao
construtor da classe
Cachorro
Chamada ao método
show( ) da classe
Cachorro
54. Exercício 1
Criar uma classe Pessoa com:
• Atributos:
– nome;
– endereço,;
– email;
– telefone
• Construtores:
– default;
– que receba nome e email;
– que receba nome, endereço, email e telefone (lembre-se que podemos
chamar outros construtores da própria classe através do this)
• Utilizar encapsulamento.
• Sobrescrever o método toString() que pertence a classe Object para
imprimir os dados no formato:
(Nome: xxx /n Email: xxx /n etc...)
• Criar classe com método main e instanciar 5 pessoas e imprimir as
instâncias
55. Exercício 2
Estender a classe Pessoa para duas outras classes
• PessoaFisica
– Possui o atributo CPF
• PessoaJuridica
– Possui o atributo CNPJ
• Sobrescrever o método toString() para imprimir
os dados adicionais alem dos da classe “mãe”
• Utilizar a super nos construtores das classes filhas
• Criar uma classe com método main e instanciar 3
pessoas de cada
56. Exercício 3
Nosso sistema possui uma classe chamada Manobrista
que possui um método chamado estacionar. Este
método recebe um objeto e realiza as seguintes
operações:
• acelerar;
• freiar;
• virar(direção);
• engatarMarcha(marcha);
Sabendo que osistema pode receber vários tipos de
veículos (carros, motos, caminhões, ônibus), crie uma
hierarquia de classes para resolver o problema do
manobrista.
57. Exercício 4
Nosso estacionamento recebe um novo
cliente chamado James Bond. Ele trouxe dois
carros para estacionar. Como seriam as classes
para estes carros? Qual classe estes carros
devem estender e quais atributos devemos
modificar?
Sabendo que os carros de Bond sempre tem
algo diferente de outros carros, qual a solução
ideal para resolvermos este problema?