Herança Modelagem e Programação Orientada a Objetos Curso Superior de Tecnologia em Sistemas para Internet Prof. Cristiano Stüpp Nunes cristiano.nunes@metrocamp.edu.br
Herança Muitas vezes, classes diferentes tem características comuns, então, ao invés de criarmos uma nova classe com todas essas características usamos as características de uma classe já existente; Para implementar tal procedimento mencionado acima, usamos o conceito de herança. public class Funcionario { private String nome; private String endereco; private String matricula; } public class Cliente { private String nome; private String endereco; private String cod_cli; }
Herança Herança é um mecanismo que permite que características comuns a diversas classes sejam fatoradas em uma classe base (ou superclasse); //classe fatorada (classe base) public class Pessoa { private String nome; private String endereco; } A partir de uma classe base, outras classes podem ser especificadas; Cada classe derivada (ou subclasse) apresenta as características (estrutura e métodos) da classe base e acrescenta a elas o que for definido de particularidade para ela.
Herança Basicamente significa dizer que uma classe herda os atributos e métodos de uma classe “mãe”, ou seja, a super classe; Para se implementar o conceito de herança em Java, usa-se a palavra reservada extends Exemplo: public class Funcionario extends Pessoa { private String matricula; }
Herança em Cadeia 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.
Método Construtor em Herança Toda classe tem seu método construtor. Portanto, em uma relacionamento de herança existem no mínimo duas classes envolvidas, temos então dois métodos construtores; Para acessarmos o método construtor da classe que está sendo herdada usamos o super() public class Pessoa { private String nome; private String endereco; public Pessoa(String nm) { nome = nm; } public class Funcionario extends Pessoa { private String matricula; public Funcionario(String n, String m) { super(n); matricula = m; }
Método Construtor em Herança Podemos usar o super() para qualquer construtor da super classe, pois o Java consegue diferenciar os construtores por causa da sobrecarga de métodos; Se o construtor da super classe não contiver argumentos então não há a necessidade de se usar a palavra reservada super() pois o Java implicitamente invoca o construtor da super classe dentro do construtor da subclasse.
Sobrescrição de Métodos Ao invés de uma subclasse simplesmente herdar um método da super classe, pode-se ainda redefinir o mesmo método da super classe dentro da subclasse, a isso dá-se o nome de Sobrescrição de Método (Overriding); public class Superclasse { public void imprime() { System.out.println( "Esse é o método imprime da Superclasse"); } public class Subclasse extends Superclasse { public void imprime() { System.out.println( "Esse é o método imprime da Subclasse"); } public class SobrescricaoDeMetodos { public static void main(String[] args) { Superclasse superC = new Superclasse(); Subclasse subC = new Subclasse(); superC.imprime(); subC.imprime(); }
Sobrescrição de Métodos Se houver a necessidade de invocar a versão original do método da super classe dentro da subclasse, então utiliza-se a palavra reservada super. public class Superclasse { public void imprime() { System.out.println( "Esse é o método imprime da Superclasse"); } public class Subclasse extends Superclasse { public void imprime() { super.imprime(); System.out.println( "Esse é o método imprime da Subclasse"); } public class SobrescricaoDeMetodos { public static void main(String[] args) { Superclasse superC = new Superclasse(); Subclasse subC = new Subclasse(); superC.imprime(); subC.imprime(); }