Junior
Ce sunt moștenirea și polimorfismul în tipurile de date referință?
sobes.tech AI
Răspuns de la AI
Moștenirea este un mecanism care permite unei noi clase (subclasă/clasă fiică) să moștenească proprietăți ( câmpuri) și comportamente (metode) ale unei clase existente (superclasă/părinte), extinzând sau suprascriind funcționalitatea. Acest lucru promovează reutilizarea codului și stabilește relații de tipul "este" (is-a).
Polimorfismul este capacitatea obiectelor din clase diferite de a răspunde diferit la același nume de metodă, în funcție de tipul lor specific în timpul execuției. Oferă flexibilitate și extensibilitate codului, permițând tratarea obiectelor din subclase printr-o referință la superclasă.
În tipurile de date de referință (clase), aceste concepte joacă un rol cheie:
- Moștenire: Subclasa are acces la membrii superclasei și poate adăuga propriile sale sau modifica comportamentul metodelor moștenite (suprascriere - overriding). Un obiect de subclasă poate fi utilizat oriunde unde se așteaptă un obiect de superclasă.
- Polimorfism: Diferite obiecte, aparținând aceleiași ierarhii de moștenire, pot fi tratate cu același cod, apelând aceeași metodă, dar implementarea acesteia fiind specifică pentru tipul obiectului în timpul execuției.
Exemplu în Java:
// Superclasă (clasă părinte)
class Animal {
public void makeSound() {
System.out.println("Emite un sunet");
}
}
// Subclasă (clasă fiică), moștenește de la Animal
class Dog extends Animal {
// Suprascrie metoda din superclasă
@Override
public void makeSound() {
System.out.println("Ham!");
}
}
// Subclasă (clasă fiică), moștenește de la Animal
class Cat extends Animal {
// Suprascrie metoda din superclasă
@Override
public void makeSound() {
System.out.println("Miau!");
}
}
// Exemplu de polimorfism
public class PolymorphismExample {
public static void main(String[] args) {
Animal myAnimal = new Animal(); // obiect de superclasă
Animal myDog = new Dog(); // obiect de subclasă, referință la superclasă
Animal myCat = new Cat(); // obiect de subclasă, referință la superclasă
myAnimal.makeSound(); // Va afișa: Emite un sunet
myDog.makeSound(); // Va afișa: Ham! (polimorfism - metoda Dog)
myCat.makeSound(); // Va afișa: Miau! (polimorfism - metoda Cat)
}
}