Sobes.tech
Middle

Kokie polimorfizmo įgyvendinimo mechanizmai egzistuoja Java?

sobes.tech AI

Atsakymas iš AI

  • ** Laiko polimorfizmas (statinis polimorfizmas)**: įgyvendinamas naudojant metodų perkrovimą (method overloading). Metodai turi tą patį pavadinimą, bet skirtingas paraiškas (argumentų skaičių, tipą ar tvarką).

    class Calculator {
        // add metodo perkrovimas
        public int add(int a, int b) {
            return a + b;
        }
    
        public double add(double a, double b) {
            return a + b;
        }
    }
    
  • Veikimo laiko polimorfizmas (dinaminis polimorfizmas): įgyvendinamas perkeliant metodus (method overriding). Vaiko klasėje metodas turi tą pačią paraišką kaip ir tėvo klasėje ir pateikia savo įgyvendinimą. Sprendimas, kurį metodą iškviesti, priimamas vykdymo metu, priklausomai nuo objekto faktinio tipo.

    class Animal {
        public void sound() {
            System.out.println("Gyvūnas skleidžia garsą");
        }
    }
    
    class Dog extends Animal {
        // Perrašyti metodą sound
        @Override
        public void sound() {
            System.out.println("Šuo loja");
        }
    }
    
    class Cat extends Animal {
        // Perrašyti metodą sound
        @Override
        public void sound() {
            System.out.println("Katė miaukia");
        }
    }
    
  • Nuorodos į superklasę / sąsają: Subklasių objektai gali būti priskirti superklasių arba jų įgyvendinamų sąsajų nuorodoms. Tai leidžia apdoroti skirtingų tipų objektus vienodai per bendrą nuorodą. Perrašyto metodo iškvietimas tokiu nuoroda sukelia faktinio objekto tipo metodo vykdymą.

    Animal myAnimal = new Dog(); // Priskiriama Dog objektas kaip Animal tipas
    myAnimal.sound(); // Iškviečiamas perrašytas sound() metodas iš Dog klasės