Zagadka Java #3

Zagadki Java zawierają różnego rodzaju niuanse języka i „podchwytliwe” fragmenty kodu. Każda następna zagadka będzie zawierała odpowiedź i wyjaśnienie do poprzedniej. Lista wszystkich zagadek.

Jeżeli znasz odpowiedź, podziel się nią w komentarzu!

Zagadka Java #3

Co, i dlaczego, zobaczymy na ekranie w wyniku uruchomienia klasy JustMain?

public class Animal {
  protected String favoriteFood = "unknown";

  public void eat() {
    System.out.println("Animal is eating " + favoriteFood);
  }
}
public class Cat extends Animal {
  protected String favoriteFood = "salmon";

  public void eat() {
    System.out.println("Cat is eating " + favoriteFood);
  }
}
public class MyCat extends Cat {
  protected String favoriteFood = "lasagne";

  public void eat() {
    System.out.println("MyCat is eating " + favoriteFood);
  }

  public void eatEverything() {
    this.eat();
    ((Cat) this).eat();
    ((Animal) this).eat();

    System.out.println(
        "Parent's favorite food: " + ((Cat) this).favoriteFood
    );
    System.out.println(
        "Grandparent's favorite food: " + ((Animal) this).favoriteFood
    );
  }
}
public class JustMain {
  public static void main(String[] args) {
    MyCat myCat = new MyCat();

    myCat.eatEverything();
  }
}

Odpowiedź do poprzedniej zagadki #2

Poniżej znajdziesz odpowiedź do poprzedniej zagadki.

W wyniku uruchomienia klasy Cat, na ekranie zobaczymy komunikat:

♪ Generic animal sound. ♪

Być może spodziewaliśmy się, że w związku z mechanizmem method overriding, czyli nadpisywaniem metod, wywołana zostanie metoda z klasy Cat, ponieważ faktyczny obiekt, na który pokazuje zmienna animal, to obiekt typu Cat:

Animal animal = new Cat();

Nie stało się tak jednak, ponieważ w przypadku metod statycznych nie dochodzi do nadpisywania metod (mechanizm method overriding nie jest stosowany).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Nie musisz podawać swojego imienia, e-mailu, ani strony www, aby opublikować komentarz. Komentarze muszą zostać zatwierdzone, aby były widoczne na stronie.