relacionamentos entre classes em java

20
Relacionamento entre classes Herança

Upload: marcelo-de-andrade-maciel

Post on 30-Jul-2015

1.276 views

Category:

Documents


0 download

DESCRIPTION

Apresentação do Powerpoint transformada em .PDF sobre relações entre classes em JAVA.

TRANSCRIPT

Page 1: Relacionamentos Entre Classes Em JAVA

Relacionamento entre classes

Herança

Page 2: Relacionamentos Entre Classes Em JAVA

2

O que é

• Reuso de uma classe– Tudo que foi definido para uma classe vai ser

aproveitado em outra classe

• Representa especialização– Um tipo mais genérico cujas características serão

herdadas por outra classe– Comportamento pode ser herdado ou modificado

• Classe A e classe B– B herda de A– B é subtipo de A– B é subclasse A

• Todos os atributos e métodos definidos em A tambem existem em B

Page 3: Relacionamentos Entre Classes Em JAVA

3

Herança

Seta vazada indica herança

Carro possui todas as 

característicasde Terreste e tambémde Veiculo

Page 4: Relacionamentos Entre Classes Em JAVA

4

Herança em JAVAclass ClasseA { protected int a; public int getA() { return a; } public void setA(int a) { this.a = a; }}

class ClasseB extends ClasseA{ private int b; public int getB() { return b; } public void setB(int b) { this.b = b; }}

usamos extends para indicar herança em JAVA

Page 5: Relacionamentos Entre Classes Em JAVA

5

Execução

public static void main(String args[]){ ClasseA a = new ClasseA(); ClasseB b = new ClasseB(); a.setA(10); b.setA(20); b.setB(30); System.out.println(a.getA()); System.out.println(b.getA()); System.out.println(b.getB());}

Todos os membros definidos em ClasseA também existem ClasseB

Métodoherdado

de ClasseA

Page 6: Relacionamentos Entre Classes Em JAVA

6

Subtipos

• Uma classe que herda de outra é um subtipo

– Herança representa relacionamento “é um”•Carro “é um” veículo•Livro “é uma” publicação•Cachorro “é um” mamífero

• Podemos ter uma variável do tipo ClasseA que referencia um objeto do tipo ClasseB

ClasseA a,b;a = new ClasseA();b = new ClasseB();a.setA(10);b.setA(20);//b.setB(30);System.out.println(a.getA()+b.getA());

variável b NÃOexecuta métodosde ClasseB, pois ela só conhece a

interface deClasseA

Page 7: Relacionamentos Entre Classes Em JAVA

7

Visibilidade (resumo)

• Quatro formas de visibilidade em JAVA–public

•Membros acessíveis por qualquer classe

–proteced•Membros acessíveis por classe e subclasses

–private•Membros acessíveis apenas por objetos da

própria classe

–default (pacote)•Membros acessíveis pode classes do

mesmo pacote e subclasses

Page 8: Relacionamentos Entre Classes Em JAVA

8

Sobrescrita

• Podemos redefinir um método na subclasse– Sobrescrita do método

– Muda comportamento definido na superclasse

class ClasseB extends ClasseA{ private int b; public int getB() { return b; } public void setB(int b) { this.b = b; } public void setA(int a) { this.a = a+b; }}

ClasseB b = new ClasseB();b.setB(10);b.setA(10);System.out.println(b.getA());

Valor impressoserá 20

Page 9: Relacionamentos Entre Classes Em JAVA

9

Sobrescrita

• É possível chamar o método da superclasse– Palavra super

• super.metodo();

• Pode ser usado em qualquer método– Podemos sobrescrever o método para adicionar

funcionalidade, mantendo a funcionalidade existente

class Superclasse{ /* ...*/ public void metodo(int x){ /* ... */ } /* ... */}

class Subclasse extends Superclasse{ public void metodo(int x){ /* ... */ super.metodo(10); /* ...s */ }}

Chamada ao métododa superclasse

Page 10: Relacionamentos Entre Classes Em JAVA

10

Classe Object

• Classe base em JAVA–Tudo herda de Object–Define alguns métodos:

•public String toString()•public boolean equals()•entre outros...

class UmaClasse { /* ... */ } class UmaClasse extends Object{

/* ... */ }

Incluído por padrão

Page 11: Relacionamentos Entre Classes Em JAVA

11

instanceof

• Operador– Determina se um objeto obj é de uma classe Cla

• retorna valor lógico (booleano)

• sintaxe: obj instanceof Cla

public static void main(String args[]){ ClasseA obj; obj = new ClasseC(); if (obj instanceof ClasseB) System.out.println("obj é ClasseA"); if (obj instanceof ClasseA) System.out.println("obj é ClasseB"); if (obj instanceof ClasseC) System.out.println("obj é ClasseC");}

obj é da ClasseA e da ClasseC

Page 12: Relacionamentos Entre Classes Em JAVA

12

Construtores

• Toda classe JAVA tem pelo menos um construtor– Se não for definido cria um padrão

• public NomeClasse(){...}

• Todo construtor deve chamar o construtor da superclasse– Deve ser o primeiro comando do construtor

– Compilador coloca código caso o programador não coloque

class ClasseD extends ClasseA{ public ClasseD(){ super(); /*...*/ }}

class ClasseD extends ClasseA{ public ClasseD(){ /*...*/ }}

Page 13: Relacionamentos Entre Classes Em JAVA

13

Construtores

• O código abaixo pode não compilar

• Se ClasseA não possuir construtor sem argumentos

class ClasseD extends ClasseA{ public ClasseD(){ /*...*/ }}

Page 14: Relacionamentos Entre Classes Em JAVA

14

Polimorfismo

• Muda comportamento

– Método executado depende da classe do objeto

– mesma chamada executa métodos diferentes• obj.metodo() vai executar método que foi definido

para classe do objeto referenciado por obj

– Permite executar métodos de subclasses mesmo sem conhecê-las

– Usado junto com sobrescrita

Page 15: Relacionamentos Entre Classes Em JAVA

15

Polimorfismoclass Classe1 { public String m() { return "Classe1"; }}class Classe2 extends Classe1 { public String m() { return "Classe2"; }}class Classe3 extends Classe1 { public String m() { return "Classe3"; }}class Classe4 extends Classe2 { public String m() { return "Classe4"; }}

Classe1 a, b, c, d;a = new Classe1();b = new Classe2();c = new Classe3();d = new Classe4();System.out.println(a.m());System.out.println(b.m());System.out.println(c.m());System.out.println(d.m());

• Terá 4 impressões diferentes• Experimente chamar o método da superclasse

– super.m()

Mesma operação

Page 16: Relacionamentos Entre Classes Em JAVA

16

Classes abstratas

• Não podem ser instanciadas– Usadas com herança

• Definir superclasse com características e comportamento comuns e cada subclasse implementa suas especificidades

• Não existem animais da classe mamífero, apenas de suas subclasses

– Palavra abstract antes do nome da classe

public abstract class Mamifero{/* ... */}

Page 17: Relacionamentos Entre Classes Em JAVA

17

Classes abstratas

• Métodos podem ser abstratos– Não possuem implementação

– Devem ser implementados pelas subclasses•Ou estas também serão abstratas

– Se uma classe possuir pelo menos um método abstrato, ela deve ser abstrata

– Classe abstratas podem ter métodos implementados

public abstract class Mamifero{ public abstract String metodo();}

Não possuiimplementação

Page 18: Relacionamentos Entre Classes Em JAVA

18

Classes finais

•Não podem ser herdadas–Não possuem subclasses

•Não podem ser abstratas–Por consequencia, não possuem

métodos abstratos

• Palavra final antes de class

public final class Gato{/* ... */}

Page 19: Relacionamentos Entre Classes Em JAVA

19

??

??

??

??

? ??? ?

?

???

? ??

??

?

???

? ??

?

?

???

? ??

?

?

???

? ??? ?

?

???

? ??? ?

?

???

? ??? ?

?

???

? ??? ?

?

???

??? ?

???? ?

?

Dúvidas

??

?

?

?? ?

?

Page 20: Relacionamentos Entre Classes Em JAVA

20

Exercícios1 Defina duas subclasses de Contato

– ContatoPessoaFisica

– ContatoPessoaJuridica

2 Defina metodos que conte a quantidade de cada tipo de contato

3 Faça a classe Contato abstrata

4 Sobrescreva o método toString

5 Inclua uma opção no Menu para mostrar todos os contatos

– Acrescente os métodos que achar necessario

6 Altere o exercício do banco para que o mesmo passe a aceitar dois tipos de conta: corrente e poupança

– Faça a classe Conta abstrata

– Altere o que for necessário