Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração...

56
Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas

Transcript of Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração...

Page 1: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

Atributos e Métodos EstáticosRestrições de Acesso

Encapsulamento

Operações de Abstração

Herança e PolimorfismoClasses Abstratas

Page 2: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

Atributos e Métodos EstáticosRestrições de Acesso

Encapsulamento

Page 3: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

3

Variáveis – Classe, Instância e Método

• Tipos de variáveis estudadas– Variável local de método– Variável de instância

• Variáveis de Classe ou Atributos Estáticos– Declaradas com o modificador static– São únicas para toda a classe,

independente do número de instâncias, ou seja, independente do número de objetos

diferença?

Page 4: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

4

Atributos Estáticos

• Um atributo usado com o modificador static tem o seu valor compartilhado por todos os objetos da classe, ou seja, só haverá uma cópia dele para todos os objetos da classe

• Também chamados de variáveis de classe

• Por exemplo: static double valordolar;

Page 5: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

5

public class Circulo {private static int numcirc = 0;

private double x, y, r; public Circulo ( double a, double b, double c) {

x = a; y = b; r = c;

numcirc++; }

public double area ( ) { double calc = 3.1416 * r * r; return calc; }public static void main (String[ ] args) {

Circulo umcirculo = new Circulo ( 0.0, 0.0, 2.0 ); System.out.println("Area do circulo = " + umcirculo.area ( )); System.out.println("Numero de circulos = " + Circulo.numcirc);}

}

Exemplo

Page 6: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

6

public class Circulo {private static int numcirc = 0;

private double x, y, r; public Circulo ( double a, double b, double c) {

x = a; y = b; r = c;

numcirc++; }

public double area ( ) { double calc = 3.1416 * r * r; return calc; }public static void main (String[ ] args) {

Circulo umcirculo = new Circulo ( 0.0, 0.0, 2.0 ); System.out.println("Area do circulo = " + umcirculo.area ( )); System.out.println("Numero de circulos = " + Circulo.numcirc);}

}

Variável de classe

Variáveis de

instância

Variável local de método

Exemplo

Page 7: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

7

• Variáveis de Classe: existe apenas uma única cópia da variável, associada à classe

• Variáveis de Instância: há uma cópia para cada instância da classepublic class Circulo {

private static int numcirc = 0; private double x, y, r; Circulo (double x, double y, double r) {

this.x = x; this.y = y; this.r = r;

numcirc ++; }}

Variáveis de Classe x Variáveis de Instância

Page 8: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

8

Variáveis de Classe

• Devemos acessá-la através da classe:System.out.println (“Número de circulos = ” +Circulo.numcirc);

• Constantespublic class Circulo {

private static final double PI = 3.1415926535897; ...

}– O modificador final significa que, uma vez

iniciado este atributo, ele não pode mais sofrer alteração (~constante)

Page 9: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

9

public class Circulo {private static int numcirc = 0;

private static final double PI = 3.1415926535897;private double x, y, r;

public Circulo ( double a, double b, double c) { this.x = a; this.y = b; this.r = c;

numcirc ++; }

public double calcularArea ( ) { double calc = PI * this.r * this.r; return calc; }public static void main (String[ ] args) {

Circulo umcirculo = new Circulo ( 0.0, 0.0, 2.0 ); System.out.println("Area do circulo = " + umcirculo. calcularArea ( )); System.out.println("Numero de circulos = " + Circulo.numcirc);}

}

Page 10: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

10

Restrições de Acesso• Já vimos que:

– uma classe define atributos, métodos e construtores dessa classe

– objetos podem ser criados durante a execução de um programa

– cada objeto contém variáveis de instância definidas na classe e pode receber chamadas de métodos declarados na sua classe

• Alguns modificadores de acesso podem ser especificados em declarações de classes, atributos e métodos, além do static, já mencionado

Page 11: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

11

Restrições de Acesso

• Java usa modificadores de controle de acesso para especificar o nível de visibilidade de um método ou uma variável para as outras classes

• Podem ser declarados quatro tipos de modificadores de acesso:– public– private– protected – default (ou sem modificador)

• Modificadores de acesso podem ser aplicados na definição de classes, nos atributos e nos métodos

Page 12: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

12

Restrições de Acesso• public

– Pode ser acessado a partir de qualquer outra classe– É a condição de menor restrição possível

• protected– Pode ser acessado por métodos de classe que o contém,

assim como por qualquer classe que tenha sido derivada dessa classe (sub-classes) mesmo que esteja em outro package

• private– É privativo da classe que o contém e seu uso não é permitido

a qualquer outra classe• sem modificador

– Uso permitido dentro da classe que o contém, assim como dentro de qualquer classe que tenha sido derivada dessa classe, que esteja no mesmo package

– Este é o modificador default, isto é, aquele que é assumido se nenhum modificador for explicitamente especificado

Page 13: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

13

VisibilidadePacotes (package): unidades de compilação distintas,

usadas para divisão de programas em partes organizadas hierarquicamente, que possibilita o controle da visibilidade de nomes em programas

Acesso permitido na

public sem nenhum modificador

protected private

mesma classe SIM SIM SIM SIMsubclasse do mesmo pacote

SIM SIM SIM NÃO

classe do mesmo pacote

SIM SIM SIM NÃO

subclasse em outro pacote

SIM NÃO SIM NÃO

classe em outro pacote

SIM NÃO NÃO NÃO

Page 14: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

14

Encapsulamento

• Objetivo: “ocultar” os detalhes de implementação do mundo externo ao objeto e restringir o acesso a atributos e métodos

Page 15: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

15

Vantagens do Encapsulamento

• Segurança no acesso ao objeto• Maior consistência no estado interno, pois

evita alteração incorreta dos atributos• Maior facilidade de modularização• A comunicação entre um objeto e o mundo

externo é feita através de troca de mensagens

• Uma mensagem é tratada por um método adequado da classe representante do objeto

Page 16: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

Operações de Abstração

Page 17: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

17

Operações de Abstração – Conceitos As operações de abstração mostram como o ser As operações de abstração mostram como o ser

humano mentaliza, organiza e modela o humano mentaliza, organiza e modela o mundo ao seu redormundo ao seu redor

• Algumas operações de abstração relevantes para a Modelagem Conceitual são

Classificação / Instanciação

Generalização / Especialização

Agregação / Decomposição

Associação

Page 18: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

18

Generalização• Processo pelo qual os caracteres comuns a vários

objetos são identificados• Pode resultar na formação de um novo conceito ou

idéia ou na extensão de um conceito já determinado, que passa a cobrir uma nova classe de exemplos

Especialização• Processo de divisão do trabalho encarado do

ângulo individual• Especializar é mencionar ou tratar à parte, de

modo especial; particularizar, singularizar, especificar

Page 19: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

19

Estudante

GENERALIZAÇÃO

Classes

Classe

Estudante de graduação Estudante de pós-graduação

Generalização

Page 20: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

20

Especialização

ESPECIALIZAÇÃO

Classe

Classe

Mamífero

Baleia

Page 21: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

21

Generalização/Especialização

Classe GeralPessoa

Classes Especializadas

Relação de pertinência: É UM TIPO DE

Estudante Professor Funcionário Diretor

Page 22: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

22

Generalização/Especialização

Classe mais geral

Classe mais específica

NotaçãoUML

Page 23: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

23

Operações de Abstração Relevantes para a Modelagem Conceitual

Generalização Operação de análise de um conjunto de

classes que identifica características comuns a todas elas, tendo como objetivo a definição de uma classe mais genérica, a qual especificará estas características comuns

Especialização Operação em que, a partir de uma classe,

identifica-se uma ou mais sub-classes, cada uma especificando características adicionais em relação a classe mais geral

Page 24: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

24

Operações de Abstração Relevantes para a Modelagem Conceitual

Generalização / Especialização Se, a partir de um conjunto de classes, pode-se

identificar características que são comuns a elas, então uma nova classe, mais geral, pode ser definida – a partir de duas classes abstrai-se uma classe

mais genérica– as sub-classes satisfazem todas as

propriedades das classes das quais elas constituem especializações

– deve existir pelo menos uma propriedade que distingue duas classes especializadas

Page 25: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

Herança e PolimorfismoClasses Abstratas

Page 26: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

26

Herança

Herança é um relacionamento do tipo generalização/especialização, onde uma classe – a subclassesubclasse – pode ser derivada de outra classe mais geral – a superclassesuperclasse – absorvendo todas as suas características fundamentais e podendo adicionar outras novas características, de tal modo a torná-la mais especializada

Page 27: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

27

Herança

• Uma subclasse herdaherda de sua(s) superclasse(s) os atributos e os métodos definidos nessa(s) superclasse(s)

• No entanto, uma subclasse pode redefinir métodosredefinir métodos existentes nas superclasses assim como acrescentar acrescentar novos atributos e novos métodosnovos atributos e novos métodos

Page 28: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

28

Exemplo de HerançaFuncionario

nomergsalario

aumentar (valor)pagar()

Chefe

gastos_extraadicional_chefia

pagar()

Superclasse

Subclasse

Page 29: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

29

Exemplo de HerançaFuncionario

nomergsalario

aumenta (valor)pagar()

Chefe

gastos_extraadicional_chefia

pagar()

Atributos de um objeto da classe Funcionário:

nomergsalario

Atributos de um objeto da classe Chefe:

nomergsalariogastos_extraadicional_chefia

Page 30: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

30

Exemplo de HerançaFuncionario

#nome#rg#salario

+aumentar (valor)+pagar

Chefe

-gastos_extra-adicional_chefia

+pagar

Métodos que os objetos da classe Funcionário podem executar:

aumentar (valor)pagar()

Métodos que os objetos da classe Chefe podem executar:

aumentar (valor) pagar()

Page 31: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

31

Exemplo de HerançaFuncionario

#nome#rg#salario

+aumenta (valor)+pagar

Chefe

-gastos_extra-adicional_chefia

+pagar

Métodos que os objetos da classe Funcionário podem executar:

aumentar (valor)pagar()

Métodos que os objetos da classe Chefe podem executar:

aumenta (valor)pagar()

qual pagamento?

Page 32: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

32

Implementação da SuperclasseSuperclasse Funcionario

public class Funcionario {String nome;String rg;double salario;public Funcionario (String nomef, String ident,

double sal) {nome = nomef;rg = ident;salario = sal;

}public void aumentar (double valor) {

salario = salario + valor;}public double pagar ( ) {

return salario;}

}

Page 33: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

33

Implementação da SuperclasseSuperclasse Funcionario

public class Funcionario {String nome;String rg;double salario;public Funcionario (String nomef, String ident,

double sal) {nome = nomef;rg = ident;salario = sal;

}public void aumentar (double valor) {

salario = this.salario + valor;}public double pagar ( ) {

return salario;}

}

Construtor da classe

Método da classeMétodos da classe

Atributos

Page 34: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

34

Implementação da SubclasseSubclasse Chefepublic class Chefe extends Funcionario {

double gastos_extra;double adicional_chefia;public Chefe (String nomef, String rg, double sal,

double gastos, double adic) { super (nomef, rg, sal); gastos_extra = gastos; adicional_chefia = adic;}public double pagar ( ) { double recebe; recebe = salario + gastos_extra + adicional_chefia; return recebe;

}}

Page 35: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

35

Implementação da SubclasseSubclasse Chefepublic class Chefe extends Funcionario {

double gastos_extra;double adicional_chefia;public Chefe (String nomef, String rg, double sal,

double gastos, double adic) { super (nomef, rg, sal); gastos_extra = gastos; adicional_chefia = adic;}public double pagar ( ) { double recebe; recebe = salario + gastos_extra +adicional_chefia; return recebe;

}}

Palavra reservada para designar que uma classe é sub-classe de uma outra classe; no caso, Chefe é

uma sub-classe derivada de Funcionário

Page 36: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

36

Implementação da SubclasseSubclasse Chefepublic class Chefe extends Funcionario {

double gastos_extra;double adicional_chefia;public Chefe (String nomef, String rg, double sal,

double gastos, double adic) { super (nomef, rg, sal); this.gastos_extra = gastos; this.adicional_chefia = adic;}public double pagar ( ) { double recebe; recebe = salario + gastos_extra +adicional_chefia; return recebe;

}}

Invocação do método construtor da super-classe Funcionário

Page 37: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

37

Implementação da SubclasseSubclasse Chefepublic class Chefe extends Funcionario {

double gastos_extra;double adicional_chefia;public Chefe (String nomef, String rg, double sal,

double gastos, double adic) { super (nomef, rg, sal); gastos_extra = gastos; adicional_chefia = adic;}public double pagar ( ) { double recebe; recebe = salario + gastos_extra +adicional_chefia; return recebe;

}}

Atributos adicionais

Construtor da subclasse Chefe

Invocação do construtor da superclasse Funcionario

Redefinição do método pagamento

Page 38: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

38

Instanciação da subclasse

public class Teste { public static void main (String [ ] args) { Chefe joao = new Chefe ("Joao", "324569", 1158.21, 259.90, 500);

joao.aumentar (300); System.out.println ("Joao ganha: R$ " + joao.pagar( ));

}}

Criação de um objeto da

classe Chefe

Execução do método aumentar, definido na superclasse Funcionário para um objeto da

classe Chefe

Execução do método pagar, definido na subclasse Chefe

Page 39: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

39

Operador de referência super• A palavra reservada super permite o uso de

nomes definidos na superclasse direta, que foram redefinidos na subclasse

• Este operador deve ser usado com bastante cuidado, principalmente na presença de modificadores de acesso

• Exemplo:

Page 40: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

40

Implementação da subclasse Chefe com superpublic class Chefe extends Funcionario {

private double gastos_extra;private double adicional_chefia;public Chefe (String nomef, String rg, double sal, double gastos,

double adic) { super (nomef, rg, sal); // Construtor da superclasse Funcionario

gastos_extra = gastos;adicional_chefia = adic;

} public double pagar ( ) {

double recebe;recebe = super.pagar ( ); // Chamada de pagamento( ) da superclasserecebe = recebe + gastos_extra + adicional_chefia;return recebe;

}}

Execução do método pagamento definido na

superclasse

Page 41: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

41

public class Ponto {...

}

public class Ponto3D extends Ponto {...

}

public class TestePonto { // classe de testepublic static void main (String [ ] args) {

... }}

Page 42: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

42

public class Ponto {private int x;private int y;public Ponto (int a, int b) { // Método Construtor

x = a;y = b;

}

public double distancia (Ponto p) { // Métodoint dx = x - p.x;int dy = y - p.y;return Math.sqrt (dx*dx + dy*dy);

}}

Page 43: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

43

public class Ponto3D extends Ponto {private int z;public Ponto3D (int a, int b, int c) {super (a, b);z = c;}public double distancia (Ponto3D p) {int dx = x - p.x;int dy = y - p.y;int dz = z - p.z;return Math.sqrt (dx*dx + dy*dy + dz*dz);}

}

Page 44: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

44

public class TestePonto {

public static void main (String [ ] args) {

Ponto p1 = new Ponto (0, 0);Ponto p2 = new Ponto (10, 10);System.out.println (p1.distancia(p2));

Ponto3D p3 = new Ponto3D (0, 0, 0);Ponto3D p4 = new Ponto3D (10, 10, 10);System.out.println (p3.distancia(p4));

}}

Page 45: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

45

Classes Abstratas• Quando definimos uma classe supomos que

objetos desta classe serão criados e instanciados

• Entretanto, há casos em que é útil definir classes para as quais nunca serão instanciados objetos

• Estas classes são utilizadas como superclasses e são chamadas de superclasses abstratas

• Nenhum objeto de superclasses abstratas pode ser instanciado

Page 46: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

46

Classes Abstratas• O único propósito de uma classe abstrata é

fornecer uma determinada superclasse da qual outras classes possam herdar a interface e/ou a implementação

• As classes da qual objetos podem ser instanciados chamam-se classes concretas

• Exemplo:– classe Animal é uma classe geral, não há objetos

desta classe, e sim subclasses que são especializadas, tais como Cavalo ou Cobra, que podem possuir objetos instanciados

Page 47: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

47

Outros Exemplos

Page 48: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

48

abstract Forma

double xdouble y

public void mover ( )public abstract void mostrar ( )

Ponto

public Ponto (a, b)public void mostrar ( )

Retangulo

double cdouble d

public Retangulo (a,b,c,d)public void mostrar ( )

Método Abstrato não possui

implementação

Implementação definida nas sub-

classes

Page 49: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

49

//Classe Formapublic abstract class Forma {

...} //Classe Pontopublic class Ponto extends Forma {

...} //Classe Retangulopublic class Retangulo extends Forma {

...} //Classe Principalpublic class Principal {

public static void main (String [ ] args) {...

}}

Page 50: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

50

//Classe Formapublic abstract class Forma {

private double x; private double y; public void move (double dx, double dy) {

x+=dx; y+=dy;

}public abstract void mostra ( ); // método abstrato

}

Page 51: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

51

//Classe Pontopublic class Ponto extends Forma {

public Ponto (double ax, double ay) { // construtorx=ax; y=ay;

}// método mover não precisa ser redefinidopublic void mostrar ( ) {

System.out.println("("+this.x+","+this.y+")");}

}

Page 52: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

52

//Classe Principalpublic class Principal {

public static void main (String args [ ]) {Ponto umponto = new Ponto

(13,14);umponto.mostra ( );umponto.move (2,2);umponto.mostra ( );

}}

Page 53: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

53

Polimorfismo• Numa dada hierarquia de classes, diferentes

subclasses podem ser derivadas de uma superclasse comum

• Neste caso, cada uma das subclasses pode substituir ou estender as propriedades de sua superclasse

Polimorfismo é a característica de herança que Polimorfismo é a característica de herança que assegura que as instâncias de uma dada assegura que as instâncias de uma dada

subclasse tenham comportamentos corretos, subclasse tenham comportamentos corretos, mesmo que diferentes do comportamento mesmo que diferentes do comportamento

definido na sua superclasse definido na sua superclasse

Page 54: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

54

Polimorfismo• Quando em uma subclasse se redefine um

método de sua superclasse (método default), deve ser usado o mesmo nome do método utilizado na superclasse

• Se o comportamento do método default da superclasse é adequado para uma ou mais subclasses, então ele não deve ser redefinido

• O método definido na subclasse pode implementar um comportamento integralmente diferente ou pode estender aquele definido na superclasse, com características adicionais

Page 55: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

55

Animal

Mamíferos

tipoAlimentacao()

Carnivoros

tipoAlimentacao()

Roedores Primatas

tipoAlimentacao()

Cachorros Gatos

tipoAlimentacao()

Exemplo de Polimorfismo

Page 56: Atributos e Métodos Estáticos Restrições de Acesso Encapsulamento Operações de Abstração Herança e Polimorfismo Classes Abstratas.

56

Funcionario

nomeRGsalario

aumentar (valor)pagar()

Gerente

gastos_extraadicional_chefia

pagar()

Presidente

participacao_lucros

pagar()

Exemplo de Polimorfismo