Sie sind auf Seite 1von 57

POO, em Java,

com Eclipse e Netbeans


Tópicos da aula

1. A pilha e a heap
2. Criando objetos
3. Herança
4. Exemplo de herança
A pilha e a heap
A Lição de anatomia do Dr. Tulp
Pilha A pilha e a heap

Onde as
coisas
residem Heap
Pilha

Pilha
Heap

Heap
Um monte de bicicletas
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
Tipos de variáveis

São inicializadas
automaticamente

Variáveis Precisam ser


locais inicializadas sempre
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
Criando objetos
A criação de Adão
Criando um
objeto de uma Ou criando
instanciando a
classe classe

nome da
new ( )
classe

lista de
argumentos
Criando bicicletas
As três etapas do
milagre da criação

pilha heap
Chamando um construtor
de outro

Ele precisa ser o primeiro comando


Ele só pode ser usado em construtores
Exemplo
Exemplo
A auto-referência this

Cada objeto pode acessar uma


referência a si próprio por meio da
palavra-chave this

this.< nomeDaVariávelDeInstância >


Exemplo com this
Exemplo com this
Herança
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
Herança – como descobrir ?

Classe A Classe B

B é sub-classe de A ?
isto é,
B estende A ?
Faça o teste:
B é uma A?
Herança
Classe A
Super-classes de
C
Classe B Classe G

Sub-classes de Classe C
C

Classe D

Classe F
Classe E
A classe Object
É a classe mãe de
todas as outras
classes em Java Object

Classe B
Classe C

Classe D
A classe Object

Por exemplo:
• getClass( )
• equals( )
• toString( )
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
Herança – reutilização de campos

Classe A
Campo 1
...
Campo N

Classe B Classe D

Classe C
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
Herança – reutilização de métodos

Classe A
Método 1
...
Método N

Classe B Classe D

Classe C
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
Herança – sobrescrevendo/ocultando

Classe A Método 1
Método 2

Classe B

Método 2
Quando sobrescrever
métodos
Como derivar sub-classes ?

Classe
mãe

Pessoa
Classe Classe
filha filha

Estudante Professor
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
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”);
}
. . . .
}
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
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
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
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 )
Exemplo - herança
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
Chamando o main
O resultado do main
A classe Animal

Animal
tipo
cor
Animal( tipo, cor )
show( )
getCor( )

Eu sou um <tipo> <cor>


Código da classe Animal
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>
Código da
classe
Cachorro
Chamadas ao
construtor da classe
mãe

Chamada ao método
show( ) da classe mãe
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 !
Código da
classe
Cocker

Chamada ao
construtor da classe
Cachorro

Chamada ao método
show( ) da classe
Cachorro
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
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
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.
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?

Das könnte Ihnen auch gefallen