Sobes.tech
Junior

Kas ir manto un polimorfisms atsauces datu tipos?

sobes.tech AI

Atbilde no AI

Manto kalšana — tas ir mehānisms, kas ļauj jaunai klasei (apakšklasei/dēla klasei) mantoēt esošās klases (virsklases/vecāku klases) īpašības (laukus) un uzvedību (metodes), paplašinot vai pārrakstot funkcionalitāti. Tas veicina koda atkārtotu izmantošanu un "ir" (is-a) attiecību izveidi.

Polimorfisms — tas ir iespēja objektiem no dažādām klasēm atbildēt uz vienu un to pašu metodes nosaukumu dažādi, atkarībā no to konkrētā tipa izpildes laikā. Tas nodrošina koda elastību un paplašināmību, ļaujot apstrādāt apakšklases objektus caur atsauci uz virsklasi.

Šīs koncepcijas spēlē galveno lomu atsauces tipu (klasēs):

  • Mantošana: Apakšklasei ir piekļuve virsklases locekļiem un tā var pievienot savus vai mainīt mantojošo metožu uzvedību (pārrakstīšana — overriding). Apakšklases objekts var tikt izmantots visur, kur sagaidāms virsklases objekts.
  • Polimorfisms: Dažādi objekti, kas pieder tai pašai mantošanas hierarhijai, var tikt apstrādāti ar vienu un to pašu kodu, izsaucot vienu un to pašu metodi, bet tās realizācija būs specifiska konkrētā objekta tipam izpildes laikā.

Piemērs Java:

// Virsklase (vecāku)
class Animal {
    public void makeSound() {
        System.out.println("Izdod skaņu");
    }
}

// Apakšklase (dēla klase), manto no Animal
class Dog extends Animal {
    // Pārrakstīt metodi no virsklases
    @Override
    public void makeSound() {
        System.out.println("Gav!");
    }
}

// Apakšklase (dēla klase), manto no Animal
class Cat extends Animal {
    // Pārrakstīt metodi no virsklases
    @Override
    public void makeSound() {
        System.out.println("Mau!");
    }
}

// Polimorfisma piemērs
public class PolymorphismExample {
    public static void main(String[] args) {
        Animal myAnimal = new Animal(); // virsklases objekts
        Animal myDog = new Dog();       // apakšklases objekts, atsauce uz virsklasi
        Animal myCat = new Cat();       // apakšklases objekts, atsauce uz virsklasi

        myAnimal.makeSound(); // Rezultāts: Izdod skaņu
        myDog.makeSound();    // Rezultāts: Gav! (polimorfisms - izsauc Dog metodi)
        myCat.makeSound();    // Rezultāts: Mau! (polimorfisms - izsauc Cat metodi)
    }
}