Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Orientada a Objetos. 1 Prof.Fábio Rener Herança. Vamos supor que nós temos três impressoras, uma matricial, uma de jato -de- tinta e outra laser. Todas elas são diferentes tipos de impressora. Em orientação a objetos dizemos que a impressora matricial, a de jato de tinta e a laser são subclasses da classe Impressora. E da mesma forma dizemos que Impressora é a superclasse das impressoras matricial, jato-de-tinta e laser. A classe Impressora define atributos e métodos que todas impressoras devem possuir(por exemplo o atributo tamanho máximo do papel). Uma classe impressora matricial vai ter por exemplo, uma variável que indica o número de agulhas utilizadas para impressão. Já a impressora a laser não precisa desta variável pois não utiliza agulhas. Mas como as duas impressoras são subclasses de Impressora, elas herdam todos os atributos e métodos da mesma. Uma subclasse fornece um comportamento especializado para sua superclasse. Através de herança podemos reutilizar o código da superclasse muitas vezes. Utilizando Herança Quando estamos projetando as classes que farão parte de um sistema, é aconselhável ter em mente um conceito muito importante da programação orientada a objetos: a herança. O que um aluno, um professor e um funcionário possuem em comum? Todos eles são pessoas e, portanto, compartilham alguns dados comuns. Todos têm nome, idade, endereço, etc. E, o que diferencia um aluno de uma outra pessoa qualquer? Um aluno possui uma matrícula; Um funcionário possui um código de funcionário, data de admissão, salário, etc; Um professor possui um código de professor e informações relacionadas à sua formação. É aqui que a herança se torna uma ferramenta de grande utilidade. Podemos criar uma classe Pessoa, que possui todos os atributos e métodos comuns a todas as pessoas e herdar estes atributos e métodos em classes mais específicas, ou seja, a herança parte do geral para o mais específico. Comece criando uma classe Pessoa (Pessoa.java) como mostrado no código a seguir: Programação Orientada a Objetos. 2 Prof.Fábio Rener Exemplo: Pessoa.java public class Pessoa { private String nome; private int idade; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public int getIdade() { return idade; } public void setIdade(int idade) { this.idade = idade; } } Esta classe possui os atributos nome e idade. Estes atributos são comuns a todas as pessoas. Veja agora como podemos criar uma classe Aluno que herda estes atributos da classe Pessoa e inclui seu próprio atributo, a saber, seu número de matrícula. Eis o código Exemplo: Aluno.java public class Aluno extends Pessoa { private String matricula; public String getMatricula() { return matricula; } public void setMatricula(String matricula) { this.matricula = matricula; } } Observe que, em Java, a palavra-chave usada para indicar herança é extends. A classe Aluno agora possui três atributos: nome, idade e matricula. Veja um aplicativo demonstrando este relacionamento. Programação Orientada a Objetos. 3 Prof.Fábio Rener Exemplo: TesteHeranca.java public class TesteHeranca { public static void main(String[] args) { //cria um objeto da classe Aluno Aluno aluno = new Aluno(); aluno.setNome("Osmar J. Silva"); aluno.setIdade(36); aluno.setMatricula("AC33-65"); // Exibe o resultado System.out.println("Nome: " + aluno.getNome() + "\n" + "Idade: " + aluno.getIdade() + "\n" + "Matrícula: " + aluno.getMatricula()); } } Vamos analisar mais um exemplo, a classe Retangulo, ela será usada para criação de objetos Geométricos. Exemplo: Retangulo.java public class Retangulo { int largura; int altura; //Construtor public Retangulo (int x){ largura=x; altura=x; } //Construtor public Retangulo (int l, int a){ largura=l; altura=a; } public void setLargura(int l){ largura=l; } public int getLargura(){ return largura; Programação Orientada a Objetos. 4 Prof.Fábio Rener } public void setAltura(int a){ altura = a; } public int getAltura(){ return altura; } public int calculaArea(){ int area = largura*altura; return area; } } Exemplo: Geometria.java public class Geometria { public static void main(String args[]) { int largura = 13; int altura = 9; // Utilização da classe retangulo Retangulo ret = new Retangulo(largura, altura); int area = ret.calculaArea(); System.out.println("Retangulo:"); System.out.println("Largura = " + ret.getLargura()); System.out.println("Altura = " + ret.getAltura()); System.out.println("Area="+area+ "\n"); } } Vamos criar outro objeto Geométrico que herde as caracteristicas de Retangulo, vamos criar um Cubo. Exemplo: Cubo.java public class Cubo extends Retangulo { public Cubo (int x) { super(x); } Programação Orientada a Objetos. 5 Prof.Fábio Rener public int calculaVolume() { int areaFace=calculaArea(); int volume= areaFace*getLargura(); return volume; } } Exemplo: Geometria.java (Alterada para usar Cubo) public class Geometria { public static void main(String args[]) { int lateralCubo = 4; Cubo cubo = new Cubo(lateralCubo); System.out.println("Cubo:"); System.out.println("Volume="+cubo.calculaVolume()); } } Exercicios 1) Usando o primeiro exemplo onde definidos a classe Pessoa, vamos criar a classe, Professor que deve herdar os atributos ja definidos em Pessoa e implementar seus atributos especificos, não esqueça de fazer uma classe para testar sua classe Professor. 2) O que é subclasses ? 3) O que é superclasses ?
Compartilhar