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:
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).