Herança Modelagem e Programação Orientada a Objetos Curso Superior de Tecnologia em Sistemas para Internet Prof. Cristiano Stüpp Nunes [email protected] 2 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; public class Funcionario { public class Cliente { private String nome; private String endereco; private String cod_cli; private String nome; private String endereco; private String matricula; } } Para implementar tal procedimento mencionado acima, usamos o conceito de herança. Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 3 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. Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 4 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; } Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 5 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. Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 6 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 { public class Funcionario extends Pessoa { private String nome; private String endereco; private String matricula; public Funcionario(String n, String m) { super(n); matricula = m; } public Pessoa(String nm) { nome = nm; } } } Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 7 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. Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet 8 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 class Subclasse extends Superclasse { public void imprime() { System.out.println( "Esse é o método imprime da 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(); } Modelagem e Programação Orientada } a Objetos Curso Superior em Tecnologia de Sistemas para Internet 9 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 Subclasse extends Superclasse { public class Superclasse { public void imprime() { public void imprime() { System.out.println( "Esse é o método imprime da Superclasse"); } 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(); } } Modelagem e Programação Orientada a Objetos Curso Superior em Tecnologia de Sistemas para Internet