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