-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path04-heranca-e-poliformismo.js
More file actions
59 lines (45 loc) · 1.98 KB
/
Copy path04-heranca-e-poliformismo.js
File metadata and controls
59 lines (45 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Herança é um dos pilares da Programação Orientada a Objetos (POO).
// Ela permite que uma classe (filha) reutilize atributos e métodos de outra classe (pai),
// evitando repetição de código e facilitando a manutenção e extensão do sistema.
// Ou seja, uma classe herda atributos e métodos de outra classe.
// Polimorfismo é outro pilar da Programação Orientada a Objetos (POO), que consiste em permitir que o mesmo método tenha comportamentos diferentes dependendo do contexto em que é utilizado.
// Ele permite que métodos com o mesmo nome se comportem de maneira diferente conforme:
// - A classe que o implementa (polimorfismo por herança).
// - Os tipos de parâmetros (em linguagens com overloading, como Java e C++).
// - A lógica interna que é executada em tempo de execução (como em métodos sobrescritos em subclasses).
class Animal {
constructor(name) {
this.name = name;
}
speak() {
return `${this.name} makes a noise.`;
}
}
class Dog extends Animal {
// Isso é polimorfismo: o método speak tem um comportamento diferente na classe Dog
speak() {
return `${this.name} barks`;
}
}
class Cat extends Animal {
constructor(name, breed) {
super(name); // Chama o construtor da classe pai (Animal)
this.breed = breed;
}
// Também sobrescreve o método speak (polimorfismo)
speak() {
return super.speak(); // mesmo sobreescrevendo o método, estou usando super.speak() para puxar o comportamento padrão da classe pai (Animal)
}
}
class Rabbit extends Animal {
// Como não foi definido um constructor, usa o da classe pai por padrão
// comportamento padrão da função speak também
}
// ==========================
// Criando e testando os objetos
const dog = new Dog('Rex');
console.log(dog.speak()); // Rex barks
const cat = new Cat('Belo', 'SRD');
console.log(cat.speak()); // Belo makes a noise.
const rabbit = new Rabbit('Coelhinho');
console.log(rabbit.speak());