13 sierpień 2008

Java Killers...


Po pierwsze gratulacje dla Kazika Pogody za współzwyciężenie w Eclipse Ganymede Around the World Contest, a dokładniej za popełnienie posta o tym IDE! Najpierw Jacek, teraz Kazik... Coś jest dobrego w polish developers :-)


Po drugie zapraszam do przejrzenia poniższego kodu. Natrafiłem na tego typu problem podczas czytania książki do SCJP 6. Dla mnie to było coś nowego....


Nadpisywanie a przeciążanie metod ;-)


Jaki będzie wynik poniższego kodu?



public class Car {

public void roof(String color) {
System.out.println("Roof is " + color);
}
}

public class Wolga extends Car {

public void roof(String color) {
System.out.println("Wolga's roof is " + color);
}

public static void main(String[] args) {
Car car = new Car();
Wolga wolga = new Wolga();
Car carRefToWolga = new Wolga();

car.roof("blue");
wolga.roof("red");
carRefToWolga.roof("yellow");
}


Wynik.........






NAJPIERW POMYŚL....









Roof is blue
Wolga's roof is red
Wolga's roof is yellow


Pierwsze dwa wiadomo, trzeci wynik jest taki ponieważ obiekt carRefToWolga jest "wywoływany" przez JVM w 'runtime' na podstawie typu obiektu.



Kolejny przykład...



public class Fish { }

public class Shark extends Fish { }

public class TestFishes {

public void swim(Fish fish) {
System.out.println("Fishes like swimming");
}

public void swim(Shark shark) {
System.out.println("Sharks like swimming too");
}

public static void main(String[] args) {
TestFishes testFishes = new TestFishes();
Fish fishObject = new Fish();
Shark sharkObject = new Shark();
Fish fishRefToShark = new Shark();

testFishes.swim(fishObject);
testFishes.swim(sharkObject);
testFishes.swim(fishRefToShark);
}
}

Wynik......








NAJPIERW POMYŚL....









Fishes like swimming
Sharks like swimming too
Fishes like swimming



Pierwsze dwa wiadomo, trzeci wynik jest taki ponieważ przy przeciążaniu metod w trakcie wywoływania obiektu fishRefToShark maszyna wirtualna Javy odwoła się do typu referencji ;-)


Mam nadzieję, że Paweł Szulc nie będzie zły za bezczelnie skopiowanie tytułu posta :-). Jeśli chcecie poczytać więcej ciekawego kodu, zapraszam do niego.

0 komentarze: