Sobes.tech
Middle
139

Jakie mechanizmy realizacji polimorfizmu istnieją w Javie?

Odpowiedź od AI

sobes.tech AI

  • Polimorfizm czasu kompilacji (polimorfizm statyczny): Realizowany jest za pomocą przeciążania metod (method overloading). Metody mają tę samą nazwę, ale różne sygnatury (liczba, typ lub kolejność argumentów).

    class Calculator {
        // Przeciążenie metody add
        public int add(int a, int b) {
            return a + b;
        }
    
        public double add(double a, double b) {
            return a + b;
        }
    }
    
  • Polimorfizm czasu wykonywania (polimorfizm dynamiczny): Realizowany jest za pomocą nadpisywania metod (method overriding). Metoda w klasie pochodnej ma tę samą sygnaturę co metoda w klasie bazowej i zapewnia własną implementację. Decyzja, którą metodę wywołać, jest podejmowana w czasie wykonywania na podstawie rzeczywistego typu obiektu.

    class Animal {
        public void sound() {
            System.out.println("Animal wydaje dźwięk");
        }
    }
    
    class Dog extends Animal {
        // Nadpisanie metody sound
        @Override
        public void sound() {
            System.out.println("Pies szczeka");
        }
    }
    
    class Cat extends Animal {
        // Nadpisanie metody sound
        @Override
        public void sound() {
            System.out.println("Kot miauczy");
        }
    }
    
  • Odwołania do nadklasy / interfejsu: Obiekty podklas mogą być przypisane do odwołań nadklas lub interfejsów, które implementują. Pozwala to na jednolite traktowanie obiektów różnych typów przez wspólne odwołanie. Wywołanie nadpisanej metody przez takie odwołanie skutkuje wykonaniem wersji metody z rzeczywistego typu obiektu.

    Animal myAnimal = new Dog(); // Przypisanie obiektu Dog do odwołania typu Animal
    myAnimal.sound(); // Wywołuje nadpisaną metodę sound() z klasy Dog