Skip to content

Instantly share code, notes, and snippets.

@lukaspili
Created April 24, 2012 13:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lukaspili/2479623 to your computer and use it in GitHub Desktop.
Save lukaspili/2479623 to your computer and use it in GitHub Desktop.
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