linguagem de programação iialessandro.borges/lp_ii... · linguagem de programação ii / java -...

26
Linguagem de Programação II / Java - Herança Linguagem de Programação II Herança Prof. Alessandro Borges

Upload: phungnhan

Post on 10-Nov-2018

236 views

Category:

Documents


0 download

TRANSCRIPT

Linguagem de Programação II / Java - Herança

Linguagem de Programação II

Herança

Prof. Alessandro Borges

Linguagem de Programação II / Java - Herança

Tópicos

Reutilização de classes

Delegação

Herança

Definição

Superclasse e Subclasse

A palavra reservada ‘extends’

Método construtor com herança

Definição do método ‘super’

Hierarquia de classes

Herança múltipla

2

Linguagem de Programação II / Java - Herança

Reutilização de classes3

Linguagem de Programação II / Java - Herança

Reutilização de classes

Aproveita códigos já testados e comprovados.

Reduz necessidade de escrever novos métodos e

classes

Economiza o trabalho do programador

Reduz possibilidade de erros

Mecanismos de reutilização de classes em Java

Delegação (Composição)

Herança

4

Linguagem de Programação II / Java - Herança

Delegação (Composição)5

Linguagem de Programação II / Java - Herança

Delegação (Composição)

Uma nova classe estende uma classe base incluindo uma

instância da classe base como atributo na nova classe.

A nova classe é composta de campos específicos e de uma

instância da classe base.

As classes originais ficam, assim, contidas na nova classe

Métodos correspondentes são criados na nova classe para

viabilizar o uso dos métodos da classe base, delegando,

assim, a execução desses métodos.

6

Linguagem de Programação II / Java - Herança

Delegação (Composição)

Exemplo:

Classe base Data

Classe base Hora

Nova Classe DataHora

7

Linguagem de Programação II / Java - Herança

Delegação (Composição)

Exemplo:

Classe base Data

Classe base Hora

Nova Classe DataHora

8

Atributos:

- dia (byte)

- mês (byte)

- ano (short)

Métodos:

- Construtor

- get‘s e set’s

- validaData (boolean)

Linguagem de Programação II / Java - Herança

Delegação (Composição)

Exemplo:

Classe base Data

Classe base Hora

Nova Classe DataHora

9

Atributos:

- hora (byte)

- minuto (byte)

- segundo (short)

Métodos:

- Construtor

- get‘s e set’s

- validaHora (boolean)

Linguagem de Programação II / Java - Herança

Delegação (Composição)

Exemplo:

Classe base Data

Classe base Hora

Nova Classe DataHora

10

Atributos:

- estaData (Data)

- estaHora (Hora)

Métodos:

- Construtor(es)

- setDataHora

- validaDataHora (boolean)

- toString (String)

Linguagem de Programação II / Java - Herança

Delegação (Composição)

Exemplo:

Classe base Data

Classe base Hora

Nova Classe DataHora

11

Atributos:

- estaData (Data)

- estaHora (Hora)

Métodos:

- Construtor

- setDataHora

- validaDataHora (boolean)

- toString (String)

Composição

Delegação

Linguagem de Programação II / Java - Herança

Herança12

Linguagem de Programação II / Java - Herança

HerançaO que é

Mais uma forma de evitar a repetição de código.

Permite criar uma classe usando outra como base,

reutilizando atributos e métodos não privados e

acrescentando diferenças específicas

É um relacionamento entre um elemento genérico e um

mais específico

Relações “é um tipo de” entre classes

Também chamada de Generalização / Especialização

O objeto da classe filha “herda” todas as características

da classe pai.

13

Linguagem de Programação II / Java - Herança

HerançaSuperclasse e Subclasse

Relacionamento entre classes onde:

A partir de uma classe existente (superclasse) é possível criar

uma nova classe (subclasse);

Superclasse e Subclasse :

Superclasse (ou classe base ou classe ancestral) : é a classe existente que é herdada por uma outra classe.

Subclasse (ou classe derivada ou classe herdeira): consiste na

classe que herda todos os métodos e atributos de uma classe existente;

Classes finais (final) não podem ser herdadas

14

Linguagem de Programação II / Java - Herança

HerançaSuperclasse e Subclasse

Dizemos que: “Uma classe (subclasse) estende (herda)

outra classe (superclasse)”.

Implementado através da palavra reservada extends

Uma subclasse pode adicionar Métodos e Atributos

particulares, mas não pode remover Métodos e

Atributos da superclasse, contendo, então, todos eles.

15

Linguagem de Programação II / Java - Herança

HerançaSuperclasse e Subclasse

Se a superclasse tem atributos privados, então somente

poderão ser acessados por métodos da superclasse.

A herança permite que os métodos públicos da

superclasse sejam usados na subclasse para acessar os

atributos da superclasse.

Os métodos próprios da subclasse, porém, não podem

acessar diretamente os atributos privados da

superclasse.

16

Linguagem de Programação II / Java - Herança

Semântica: “é um”

Exemplos:

Aluno “é uma” Pessoa

Professor “é uma” Pessoa

Na Herança as classes mais genéricas são

divididas em subclasses mais específicas.

Herança17

Aluno Professor

Pessoa

Superclasse

SubclasseSubclasse

Linguagem de Programação II / Java - Herança

Herança em Java18

Implementando a classe Pessoa:

1. public class Pessoa{

2. String nome;

3. int idade;

4. public void Falar(){

5. System.out.println("Falar alto.");

6. }

7. }

Implementando a classe Aluno que herda da classe Pessoa:1. public class Aluno extends Pessoa{

2. String matricula;

3. public void Matricular(){

4. System.out.println("Aluno Matriculado.");

5. }

6. }

Linguagem de Programação II / Java - Herança

Método Construtor usando Herança

em Java

19

Implementando a classe Pessoa:

1. public class Pessoa{

2. String nome;

3. int idade;

4. public Pessoa(String nome, int idade){

5. this.nome = nome;

6. this.idade = idade;

7. }

8. }

Implementando a classe Aluno que herda da classe Pessoa:1. public class Aluno extends Pessoa{

2. String matricula;

3. public Aluno(String nome, int idade, String matricula){

4. super(nome, idade);

5. this.matricula = matricula;

6. }

7. }

O construtor da subclasse recebe,

como argumentos, os dados para

criar a superclasse mais os dados

específicos da subclasse

Linguagem de Programação II / Java - Herança

Herança

Superclasse e Subclasse

Construtores são chamados simplesmente pela palavra

super seguida dos argumentos.

Métodos são chamados pela palavra super seguida de

um ponto e do nome do método.

Construtores de superclasses só podem ser chamados

de dentro de construtores de subclasses e na primeira

linha de código do construtor da subclasse.

Somente métodos e construtores da superclasse

imediata podem ser chamados usando super.

Não existem construções super.super

20

Linguagem de Programação II / Java - Herança

Herança – Hierarquia de classes

Pessoa

FísicaPessoa

Jurídica

Pessoa

Aluno Professor Escola

Superclasse

Subclasse e

Superclasse Subclasse e

Superclasse

SubclasseSubclasse Subclasse

21

Linguagem de Programação II / Java - Herança

Herança – Hierarquia de classes

Superclasse direta:

Herdada explicitamente (um nível acima na hierarquia).

Superclasse indireta (herança em cadeia):

Herdada de dois ou mais níveis acima na hierarquia.

Herança única:

Herda apenas uma superclasse.

Herança múltipla:

Herda múltiplas superclasses.

22

Linguagem de Programação II / Java - Herança

Herança Múltipla

Uma classe possui mais de uma superclasse.

Exemplos de Herança Múltipla:

Exemplo 1 Exemplo 2

Estudante Trabalhador

Monitor

Carro Brinquedo

Carro de

Brinquedo

Superclasses

Subclasses

23

Linguagem de Programação II / Java - Herança

Herança Múltipla em Java

Java não suporta herança múltipla.

Herança Múltipla em Java ocorre a partir:

1. Da extensão de outra classe (superclasse); e

2. Do uso de interfaces.

Assinatura de uma classe Java com herança múltipla:

[modificadores] class [nome_classe] extends[nome_superclasse] implements [nome_interface1], [nome_interface2], ... , [nome_interfaceN]

24

Linguagem de Programação II / Java - Herança

Linguagem de Programação II

Herança

Prof. Alessandro Borges

Linguagem de Programação II / Java - Herança

Exercício26

Escreva um programa em Java que implemente a

Herança a partir das classes abaixo conforme

mostrado no diagrama de classes da UML.

Veiculo

- marca: String- velocidade: Double

+ Veiculo(marca: String, velocidade: Double)+ getMarca(): String+ setMarca(String marca) : Void

Moto

- tamanho: String+ Moto(marca: String, velocidade: Double, tamanho: String)+ getTamanho(): String+ setTamanho(String tamanho) : Void

Carro

- numPortas: int

+ Carro(marca: String, velocidade: Double, numPortas: int)+ getNumPortas(): int+ setNumPortas(int numPortas) : Void