Polimorfismo - O que é?
Ou seja, o objeto tem a capacidade de assumir diferentes formas (polimorfismo).
Vamos criar a classe Superclasse que tem apenas um método, o hello(). Instanciamos um objeto e chamamos esse método:
class Super: def hello(self): print("Olá, sou a superclasse!") teste = Super() teste.hello()
Agora o resultado:
- Olá, sou a superclasse!
Agora vamos criar outra classe, a Sub, que vai herdar a Superclasse e vamos definir nela um método de mesmo nome hello(), mas com um texto diferente:
class Super: def hello(self): print("Olá, sou a superclasse!") class Sub (Super): def hello(self): print("Olá, sou a subclasse!") teste = Sub() teste.hello()
O resultado vai ser:
- Olá, sou a subclasse!
Veja bem, Sub herda a Superclasse, ou seja, tudo que nem na superclasse (atributos e métodos), vai ter na subclasse.
Porém, quando chamamos o método hello(), ele vai invocar o método da subclasse e não da superclasse! O Python entende: "Opa, ele instanciou um objeto da subclasse. Por isso vou invocar o método da subclasse e não da superclasse"
Ou seja, seu objeto assumiu a forma da subclasse, embora ele também seja uma superclasse.
Dizemos que o método da subclasse fez uma sobreposição, ele sobrepôs, passou por cima, do método da superclasse.
Vamos mais além agora, e criar a Subsubclasse, que vai herdar a Sub.
Hora, se a Subsubclasse herda a Sub, e a Sub herda a Super, então a Subsubclasse também herda tudo da Super.
Porém, quando instanciamos um objeto da Subsub e invocamos o método hello(), ele vai rodar o método da Subsub:
class Super: def hello(self): print("Olá, sou a superclasse!") class Sub (Super): def hello(self): print("Olá, sou a subclasse!") class Subsub (Sub): def hello(self): print("Olá, sou a subsubclasse!") teste = Subsub() teste.hello()
Sacaram a lógica da coisa?
Embora estejamos chamando sempre o mesmo método (hello), que está presente em todas as classes e nas herdadas, ele age de maneira diferente!
oi
ResponderExcluirola
Excluiropa
ExcluirLegal demais! Obrigado!
ResponderExcluirOlá
ResponderExcluirMuito obrigada pela explicação! Ajudou demais!!
ResponderExcluirmuito bem explicado
ResponderExcluirexplicado bem muito
Excluirincrivelmente bem explicado
ResponderExcluir