Relacionamentos Entre Classes Em JAVA

20
Relacionamento entre classes Herança

description

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

Transcript of Relacionamentos Entre Classes Em JAVA

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