HERANÇA
Mecanismo pelo qual elementos mais específicos (subclasses) incorporam estrutura e comportamento de elementos mais gerais (superclasses).
// SuperClass.javapublic class SuperClass {...}// SubClass.javapublic class SubClass extends SuperClass {...}
Herança é a capacidade de reutilizar código pela especialização de soluções genéricas já existentes.
Herança é na verdade, uma classe derivada de outra classe. Processo no qual uma classe herda características de outra.
Simplificando...
Vamos imaginar que exista uma classe chamada Eletrodomestico, e nela estão definidos os seguintes atributos: ligado (boolean), voltagem (int) e consumo (int).
HERANÇA
Se levarmos em conta a classe TV que estamos usando de exemplo até agora, podemos dizer que TV deriva de Eletrodomestico. Ou seja, a classe TV possui todas as características da classe Eletrodomestico, além de ter suas próprias características.
EXTENDS E SUPER
class NomeDaClasseASerCriada extends NomeDaClasseASerHerdada
Importante: Java permite que uma classe herde apenas as características de uma única classe, ou seja, não pode haver heranças múltiplas. Porém, é permitido heranças em cadeias, por exemplo: se a classe Mamifero herda a classe Animal, quando fizermos a classe Cachorro herdar a classe Mamifero, a classe Cachorro também herdará as características da classe Animal.
Tratando de herança de classes, toda classe tem seu método construtor.
Portanto, se estamos trabalhando com duas classes, temos dois métodos
construtores. Para acessarmos o método construtor da classe que está
sendo herdada usamos o super().
NA PRÁTICA
01. package heranca;
02.
03. public class Eletrodomestico {
04. private boolean ligado;
05. private int voltagem;
06. private int consumo;
07.
08. public Eletrodomestico(boolean ligado, int voltagem, int consumo) {
09. this.ligado = ligado;
10. this.voltagem = voltagem;
11. this.consumo = consumo;
12. }
13. }
Classe 1: Eletrodomestico
NA PRÁTICA
01. package heranca;
02.
03. public class TV extends Eletrodomestico {
04. private int canal;
05. private int volume;
06. private int tamanho;
07.
08. public TV(int voltagem, int consumo, int canal, int volume, int tamanho) {
09. super(false, voltagem, consumo);
10. this.canal = canal;
11. this.volume = volume;
12. this.tamanho = tamanho;
13. }
14. }
Classe 2: TV
01. package heranca;
02.
03. public class ExemploHeranca {
04. public static void mostrarCaracteristicas(TV obj) {
05. System.out.print("Esta TV tem as seguintes características:\n"
06. + "Tamanho: " + obj.getTamanho() + "\"\n"
07. + "Voltagem Atual: "+ obj.getVoltagem() + "V\n"
08. + "Consumo/h: " + obj.getConsumo() + "W\n");
09. if (obj.isLigado()) {
10. System.out.println("Ligado: Sim\n"
11. + "Canal: " + obj.getCanal() + "\n"
12. + "Volume: " + obj.getVolume()+"\n");
13. } else {
14. System.out.println("Ligado: Não\n");
15. }
16. }
17.
18. public static void main(String args[]) {
19. TV tv1 = new TV(110, 95, 0, 0, 21);
20. TV tv2 = new TV(220, 127, 0, 0, 29);
21. tv2.setLigado(true);
22. tv2.setCanal(3);
23. tv2.setVolume(25);
24. mostrarCaracteristicas(tv1);
25. mostrarCaracteristicas(tv2);
26. }
27. }
Classe que mostra a instanciação de TV.
HERANÇA
Resultado do código:
Esta TV tem as seguintes características:Tamanho: 21"Voltagem Atual: 110VConsumo/h: 95WLigado: Não
Esta TV tem as seguintes características:Tamanho: 29"Voltagem Atual: 220VConsumo/h: 127WLigado: SimCanal: 3Volume: 25
EXERCÍCIO
Crie um código para representar Liquidificadores.
Sendo o mesmo tendo o controle de Velocidade Analógico e Digital.
Criação de uma classe base genérica LiquidificadorGenerico contendo as características comuns destes aparelhos e duas derivadas LiquidificadorAnalogico e LiquidificadorDigital que implementem as características particulares.
EXERCÍCIO
Classes: Liquidificador
// LiquidificadorGenerico.javapublic class LiquidificadorGenerico {// atributosprotected int velocidade;protected int velocidadeMaxima;// construtorespublic LiquidificadorGenerico() {velocidade = 0;velocidadeMaxima = 2;}public LiquidificadorGenerico(int v) {this()ajustarVelocidadeMaxima(v);}// metodosprotected void ajustarVelocidadeMaxima(int v) {if (v>0)velocidadeMaxima = v;}protected void ajustarVelocidade(int v) {if (v>=0 && v<=velocidadeMaxima)velocidade = v;}public int obterVelocidadeMaxima() {return velocidadeMaxima;}}public int obterVelocidade() {return velocidade;}}
Classe LiquidificadorAnalogico
// LiquidificadorAnalogico.javapublic class LiquidificadorAnalogico extendsLiquidificadorGenerico {// construtorpublic LiquidificadorAnalogico() {velocidade = 0;}// metodospublic void aumentarVelocidade() {ajustarVelocidade(velocidade + 1);}public void diminuirVelocidade() {diminuirVelocidade(velocidade - 1);}}
Classe LiquidificadorDigital
// LiquidificadorDigital.javapublic class LiquidificadorDigital extendsLiquidificadorGenerico{// construtorpublic LiquidificadorDigital() {velocidade = 0;}// metodopublic void trocarVelocidade(int v) {// aciona método protegido para troca de velocidadeajustarVelocidade(v);}}
Tiexperthttp://www.tiexpert.net/programacao/java/heranca.php
Wikipediahttp://pt.wikipedia.org/wiki/Herança_(programação)
Imastershttp://imasters.uol.com.br/artigo/3444/java/heranca_em_java/
DCA - Department of Computer Engineering and Industrial Automation
http://www.dca.fee.unicamp.br/cursos/PooJava/heranca/
PUCRS | Faculdade de Informáticahttp://www.inf.pucrs.br/~flash/lapro2/lapro2_heranca.pdf
Núcleo de Educação a Distância - Universidade São Francisco
Introdução ao Java, Apostila. - Prof. Peter Jandl Junior - 1999
REFERÊNCIAS
Top Related