Polimorfizmas (gr. poly – daug, morphē – forma) – tai objektinio programavimo principas, leidžiantis vieną ir tą patį veiksmą (metodą) atlikti skirtingai, priklausomai nuo objekto, su kuriuo jis kviečiamas. Tai reiškia, kad skirtingi objektai gali reaguoti į tą patį pranešimą (metodo iškvietimą) skirtingai.
Trumpai:
Vienas interfeisas arba bazinė klasė – daug įgyvendinimo variantų.
Pavyzdžiai
1. Geometrinių figūrų skaičiavimas
Bazinė klasė `Figūra` turi metodą `plotas()`. Kiekviena išvestinė klasė jį įgyvendina savo būdu:
python
class Figura:
def plotas(self):
pass
class Kvadratas(Figura):
def __init__(self, kraštinė):
self.kraštinė = kraštinė
def plotas(self):
return self.kraštinė 2
class Apskritimas(Figura):
def __init__(self, spindulys):
self.spindulys = spindulys
def plotas(self):
return 3.14 self.spindulys 2
Polimorfinis elgesys:
figūros = [Kvadratas(4), Apskritimas(3)]
for f in figūros:
print(f.plotas()) Kviečiamas skirtingas metodas kiekvienam objektui
Rezultatas:
16
28.26
2. Gyvūnų garsai
Bazinė klasė `Gyvūnas` turi metodą `garsas()`. Kiekvienas gyvūnas jį įgyvendina savitiškai:
java
class Gyvunas {
public void garsas() {
System.out.println("Gyvūnas skleidžia garsą");
}
}
class Šuo extends Gyvunas {
@Override
public void garsas() {
System.out.println("Au au!");
}
}
class Katė extends Gyvunas {
@Override
public void garsas() {
System.out.println("Miau!");
}
}
// Naudojimas:
Gyvunas[] gyvūnai = { new Šuo(), new Katė() };
for (Gyvunas g : gyvūnai) {
g.garsas();
// Skirtingi garsai, nors metodas vienodas
}
Rezultatas:
Au au!
Miau!
Polimorfizmo formos:
1. Perdengimas (Override) – kaip pavyzdžiuose: išvestinė klasė pakeičia bazinės klasės metodo veikimą.
2. Perkrova (Overload) – tas pats metodo pavadinimas, bet skirtingi parametrai (veikia kompiliavimo metu).
Praktinė nauda:
- Kodas tampa lankstus ir lengvai plečiamas.
- Galima apdoroti skirtingus objektus vienodu interfeisu (pvz., sąraše).
Jūsų pataisymai bus išsiųsti moderatorių peržiūrai, jei informacija tikslesnė/taisyklingesnė
ji bus patalpinta vietoj esamos.