Created
April 24, 2012 13:21
-
-
Save lukaspili/2479623 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class PolymorphismDemo { | |
public static void main(String[] args) { | |
ClassA a = new ClassA(); | |
ClassB b = new ClassB(); | |
a.foo(); | |
b.foo(); // Ok car B hérite de la méthode foo() de A | |
b.bar(); | |
a.bar(); | |
ClassA a2 = new ClassB(); // OK car B est enfant de A | |
a2.foo(); | |
a2.bar(); // Au runtime a2 est une reference vers un objet de type B | |
// Mais le compilateur ne le sait pas, car a2 est une reference | |
// de type A | |
a2.foo(); // Va executer la méthode foo() de la classe B et non de la classe A | |
// car en réalité a2 est une reference vers un objet de type B et non de type A | |
// Attention à la notion de compiletime vs runtime | |
ClassB b2 = (ClassB) a2; // Pour stocker l'objet de a2 dans une reference | |
// de type B il faut caster car la conversion n'est pas imliciite | |
b2.bar(); | |
} | |
} | |
class ClassA { | |
public void foo() { | |
System.out.println("Foo"); | |
} | |
} | |
class ClassB extends ClassA { | |
@Override | |
public void foo() { | |
super.foo(); // executer la méthode du parent | |
System.out.println("Toto"); | |
} | |
public void bar() { | |
System.out.println("Bar"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment