Sobes.tech
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)
    }
}