Herança.

Slides:



Advertisements
Apresentações semelhantes
Modificadores Marco Antonio, Arquiteto de Software – TJDF Atualizado em Novembro/2008.
Advertisements

Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
PHPOO Erick Souza. Conceitos de Orientação a Objetos Objeto é um conceito ou item(concreto ou abstrato). Software orientado a objetos Uma classe é uma.
Herança, Polimorfismo e Classes Abstratas em Java
H ERANÇA E P OLIMORFISMO Prof. Thiago Pereira Rique
Orientação a Objetos: Modificador Final para Métodos e Classes
1 Orientação a Objetos: Herança Alcides Calsavara.
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Generalização, Especialização e Conceitos
Iniciação ao Java – Márcio F. Campos
Polimorfismo e Classes Abstratas Profa
Diagrama de Classes.
Linguagem de Programação II
Interfaces em Java1 Interfaces Prof. Ricardo Linden.
Capítulo 9 Herança 1.
Herança e Polimorfismo
Herança P. O. O. Prof. Ângela e Grace.
CRIANDO OBJETOS EM JAVA
Introdução a programação (if669cc)
Programação Orientada a Objetos com Java
JAVA Orientação a Objetos
Sobrecarga e Encapsulamento
Linguagem de Programação II
Programação I Aula 2 (Métodos)
Herança em Java.
Classes, Objetos, Atributos e Métodos JAVA
Professora Lucélia Oliveira
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 12 – Overloading X Overriding Prof.a.
PHP Orientado a Objetos Análise e Desenvolvimento de Sistemas Prof
Orientação a Objetos Parte I
Orientação a Objetos Parte II
Aula prática 14 Orientação a Objetos – C++ Parte 2
Programação I Aula 6 (Herança, Polimorfismo e Encapsulamento)
Programação Orientada à Objetos
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Orientação a Objetos usando Java
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Kickstart, day 2 Semelhanças com linguagem C.
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Aula Prática 4 Monitoria IP/CC (~if669).
Polimorfismo.
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Interfaces POO Avançado.
Classes Abstratas e Interface
POO II JEAN CARLO MENDES
Herança e Arquitetura em camadas
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Classes Abstratas e Interfaces GX – Aula05 1.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Herança Modelagem e Programação Orientada a Objetos
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Bruno Inojosa MCP .NET Framework
Modificadores Programação II.
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
2 – Revisão de Programação Orientada a Objetos
Polimorfismo - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour ▐ Polimorfismo ▐ Exemplo ▐ Classes Abstratas.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
UCSal – Bacharelado em Informática Tópicos Especiais em Informática II Profa. Semíramis Assis
Prof.: Bruno Rafael de Oliveira Rodrigues. Herança Possibilita a uma classe usar campos ou métodos definidos em outra classe. Assim a classe pai possui.
Implementação Orientada a Objetos – Aula 08 Herança, sobrescrita de métodos e polimorfismo Prof. Danielle Martin Universidade de Mogi das Cruzes
Linguagem Java Programação II.
1. 2 Programação Orientada a Objetos II Prof. Maurício Rodrigues de Morais
Classes Abstratas e Interface. 2 Classe Abstrata  Uma classe abstrata serve apenas como modelo para uma classe concreta (classe que comumente usamos);
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
AULA Mais Herança Curso: Informática (Subseqüente) Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

Herança

Herança Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode acrescentar novos atributos e métodos Pode sobrescrever métodos da classe ascendente

Herança Para criar classes derivadas, utiliza-se a palavra reservada extends Exemplo: public class CarroLuxo extends Carro { … }

Herança public class CarroLuxo extends Carro { public class Carro { int velocidade; boolean motor; public void ligar(){ motor = true; } public void acelerar(){ velocidade++; public class CarroLuxo extends Carro { public void acelerar(){ velocidade += 2; }

Herança Não há limite para hierarquia de herança public class Carro { } public class CarroLuxo extends Carro { } public class CarroInvisivil extens CarroLuxo { } Em Java não existe herança múltipla public class CarroInvisivil extends Veiculo, Aparelho { }

Herança Pode haver hierarquias complexas

Termos Termos frequentemente usados: Classe base Classe derivada Classe mãe Classe filha Superclasse Subclasse Classe ascendente Classe herdeira Classe genérica Classe específica

Sobrescrita A classe herdeira possui “automaticamente” todos os atributos e métodos da classe base Se um atributo ou método for escrito novamente, ele sobrescreve o método da classe base Sobrescrever != sobrecarregar Sobrescrever == sobrepor == override Métodos sobrepostos fazem a mesma tarefa, de um jeito diferente

Sobrescrita A assinatura do método sobrescrito deve ser idêntica a do método definido na classe base Método na classe base public void acelerar(int vezes) { … } Método na classe derivada

Sobrescrita O modificador e o tipo de retorno podem ser diferentes No entanto, o método da subclasse só pode dar acesso mais amplo e nunca mais restrito Válido Classe base void acelerar( ) {...} Classe derivada public void acelerar( ) {…}

Sobrescrita (cont.) Inválido Classe base Classe derivada public void acelerar( ) {...} Classe derivada void acelerar( ) {…}

Sobrescrita Pergunta: isso pode? Classe base Classe derivada private void acelerar( ) {...} Classe derivada public void acelerar( ) {…}

Sobrescrita Pergunta: isso pode? Classe base Classe derivada private void acelerar( ) {...} Classe derivada public void acelerar( ) {…} Métodos privados não são herdados, portanto este não é um caso de sobrescrita

Sobreposição de método public class Carro { int velocidade; boolean motor; public void ligar(){ motor = true; } public void acelerar(){ velocidade++; public class CarroLuxo extends Carro { public void acelerar(){ velocidade += 2; }

Construtores Construtores não são herdados, mas são chamados automaticamente quando um objeto da classe filha é instanciado Se um construtor da classe mãe não for chamado explicitamente, o construtor padrão ou o construtor que não recebe argumentos é chamado Para escolher o construtor ou chamar explicitamente, usa-se a palavra reservada super

Construtores Classe base não tem construtor Ao instanciar objeto da subclasse, o construtor default é chamado public class Carro { int velocidade; boolean motor; //demais métodos } public class CarroLuxo extends Carro { ArCondicionado arCondicionado; public CarroLuxo( ){ arCondicionado = false;

Construtores Classe base tem construtor “void” Ao instanciar objeto da subclasse, o construtor void é chamado public class Carro { int velocidade; boolean motor; public Carro(){ velocidade =0; motor = true; } public class CarroLuxo extends Carro { ArCondicionado arCondicionado; public CarroLuxo( ){ arCondicionado = true;

Construtores Classe base tem mais de um construtor Ao instanciar objeto da subclasse, o construtor void é chamado public class Carro { int velocidade; boolean motor; public Carro(){ velocidade =0; motor = true; } public Carro(int vel, boolean mot){ Velocidade = vel; motor = mot; public class CarroLuxo extends Carro { ArCondicionado arCondicionado; public CarroLuxo( ){ arCondicionado = true;

Construtores Classe base tem mais de um construtor O construtor da subclasse pode escolher qual construtor será chamado public class Carro { int velocidade; boolean motor; public Carro(){ velocidade =0; motor = true; } public Carro(int vel, boolean mot){ Velocidade = vel; motor = mot; public class CarroLuxo extends Carro { ArCondicionado arCondicionado; public CarroLuxo( ){ super(); arCondicionado = true;

Construtores O construtor da subclasse pode escolher qual construtor será chamado Outro exemplo: public class Carro { int velocidade; boolean motor; public Carro(){ velocidade =0; motor = true; } public Carro(int vel, boolean mot){ Velocidade = vel; motor = mot; public class CarroLuxo extends Carro { ArCondicionado arCondicionado; public CarroLuxo( ){ super(0, true); arCondicionado = true;

Herança - recapitulando As classes derivadas são um subtipo da classe base Relação “é um” Aplicação da herança Reuso de implementação Produz relacionamento estático entre as classes Alteração na superclasse afeta todos os objetos

Superclasse Cósmica Object Todas as classes são derivadas da superclasse predefinida Object Object é a classe mais ancestral de todas (raiz da hierarquia) Não é necessário a palavra extends para que a classe herde de Object

Superclasse Cósmica Object A nossa classe Carro possuiu o método toString( ), mesmo que não o tenhamos escrito, pois foi herdado de Object Assim: Carro c = new Carro( ); System.out.println(c.toString( ));

Herança - Modificador private Atributos private São herdados mas não são acessíveis na subclasse Podem ser acessados por métodos público herdados (gets e sets) Métodos private Não são herdados

Herança - Modificador protected O modificador protected é muito relacionado à herança Protected está entre o modificador public e o modificador default Define Acesso de pacote Acesso por subclasses, estejam ou não no mesmo pacote

Referências Uma referência da superclasse pode ser instanciada com um objeto da classe derivada Carro c = new CarroLuxo(); No entanto, não é possível chamar métodos da classe derivada utilizando a referência c.ligarAr( ); //erro

Referências Uma referência da subclasse não pode ser instanciada com um objeto da classe derivada CarroLuxo c = new Carro(); //erro No entanto, é possível fazer casting CarroLuxo c = (CarroLuxo) new Carro();

Exercício Crie uma classe Veiculo que tenha os atributos placa, marca, modelo, ano e valor de mercado e métodos acessores e modificadores além de um método chamado toString( ) que retorna os valores dos atributos. Crie subclasses Automovel e Motocicleta. Para automóveis, armazene a quantidade de portas. Para motocicletas, armazene a quantidade de cilindradas. Crie um método calcularIpva( ): 3,5% do valor de mercado para veículos 2,5% do valor de mercado para motocicletas Se automóvel com mais de 20 anos, ele é isento Se motocicleta com mais de 10 anos, ela é isenta

Modificadores static e final Modificador static faz com que o atributo e método seja da classe e não da instância Exemplo: public class Conta { static int sequencia; // variável de classe int numero; //variável de instância ...

Modificador static Um atributo static é compartilhado por todas as instâncias da classe Exemplo Conta c1 = new Conta( ); Conta c2 = new Conta( ); c1.sequencia = 2; System.out.println(c2.sequencia); // imprime 2

Modificador static Um atributo static geralmente é chamado a partir da classe, e não a partir do objeto Exemplo Conta.sequencia = 2;

Modificador static Um método static é um método de classe Podem ser chamados a partir da classe ou de um objeto Geralmente é chamado a partir da classe, e não a partir do objeto Exemplo Classe.metodoX( );

Modificador final O modificador final aplicado a uma classe não permite que ela seja herdada por outra classe O modificador final aplicado a um método, não permite que ele seja herdado por uma subclasse O modificador final aplicado a um atributo não permite que seu valor seja alterado (atribuído mais de uma vez)

Modificador final (cont.) Exempo: public class Carro { final int VEL_MAX = 240; public void setVEL_MAX( ) { VEL_MAX = 250; //erro

Modificador final (cont.) Isto é válido: public class Carro { final int VEL_MAX=0; public Carro ( ) { VEL_MAX = 240; }

Modificador final (cont.) Na prática: public class Carro { public static final int VEL_MAX = 250; O modificador static é colocado para frisar que trata-se de uma constante da classe Além de não poder ser modificado, pode ser acessado sem instanciar um objeto