Herança, classes
• Herança - forma de reutilização de software • Novas classes são criadas a partir de classes já existentes • Absorvem atributos e comportamentos, e incluem os seus próprios
– Sobrescrevem métodos - redefinem métodos herdados
• Subclasse herda de uma superclasse
– Superclasse direta - subclasse herda explicitamente – Superclasse indireta - subclasse herda de dois ou mais níveis acima na hierarquia de classes
• Exemplo de herança
– Um retângulo é um quadrilátero
• Retângulo é um tipo específico de quadrilátero • Quadrilátero é a superclasse, retângulo é a subclasse • Não se pode dizer que um quadrilátero é um retângulo
– Nomes podem ser confusos porque a subclasse tem mais características que a superclasse
• Subclasse é mais específica que a superclasse • Toda subclasse é um objeto da sua superclasse, mas não vice-versa
– Formam estruturas hierárquicas (árvores)
• Ex: criar uma hierarquia para a classe Forma
1
Forma
FormaBidimensional
FormaTridimensional Esfera Cubo Piramide
Circulo
Quadrado
Triangulo
•Utiliza-se a palavra-chave extends: class FormaBidimensional extends Forma { ... } – Obs: membros private da superclasse não estão acessíveis diretamente na subclasse! – Então, como acessá-los ???
• Em uma superclasse:
– public
• Acessível em qualquer classe
– private
• Accesível somente nos métodos da própria superclasse
– protected
• Proteção intermediária entre private and public • Somente acessível pelos métodos da superclasse ou de uma subclasse desta
• Métodos na subclasse
– Podem se referir a membros public ou protected pelo nome
2
• Sobrescrevendo métodos
– Subclasse pode redefinir métodos da superclasse
• Quando um método é referenciado em uma subclasse, a versão escrita para a subclasse é utilizada • É possível acessar o método original da superclasse: super.nomeDoMetodo(...)
– Para invocar o construtor da superclasse explicitamente: super(); // pode-se passar parâmetros se