Moc i magia Polimorfizmu

0

Moi drodzy, witam.
Możecie opowiedzieć, co tutaj się dzieje .
**Pierwszy** zwykłe dziedziczenie.
**Drugie** Polimorfizm - wykorzystujemy takie metody, które są w MainClass i ChildClass, ale zrealizowane w ChildClass, tak?
**Trzecie** ??? Robimy z tego polimorfizmu zwykłe dziedziczenie? W takim razie musimy zawsze pisać (ChildClass), albo możemy to ominąć?

        ChildClass child = new ChildClass();
        child.method();
        
        MainClass instanceUp = child;
        instanceUp.method();
        
        ChildClass instanceDown = (ChildClass) instanceUp;
        instanceDown.method();
2

**Pierwszy** jest to zwykłe nic specjalnego - wywołanie metody. -Nie ma żadnego dziedziczenia.
**Drugie** Polimorfizm - tak to jeden z rodzajów polimorfizmu dostępny w Javie (subtyping)
**Trzecie** to zwykłe wynaturzenie. Tzw rzutowanie w dół. Robi się to w ostateczności - głównie ze względu na jakies ograniczenia frameworków itp. Normalnie mów temu twarde i zdecydowane: raczej nie.

Polimorfizm - w ogólności to możliwość napisania jednego kawałka kodu tak aby operował na różnego rodzaju danych. Jest na to wiele rozwiązań technicznych:
https://en.wikipedia.org/wiki/Polymorphism_(computer_science)

0

Dziedziczeniu też mówimy zdecydowanie raczej nie
Kompozycja i interfejsy ponad dziedziczenie :).
Np. jesli chcesz zliczać ile razy coś zostało dodane do Set, to zamiast dziedziczyć po HashSet i tam dodać zliczanie lepiej zrobić klasę CountingSet (mogłaby byc lepsza ale to nie jest istnotne) i zrobić coś takiego


public final CountSet<E> implement Set<E> {
 private int addCounter = 0; 
 private final Set<E> delegate;
 
public CountSet(Set<E> delegate) {
  this.delegate = delegate
}

@Override
   public boolean add(E element) {
     if (delegate.add(element) {
       counter++
   }
}
 
//reszta metod

1 użytkowników online, w tym zalogowanych: 0, gości: 1