
Untitled
By: a guest on
Jun 26th, 2012 | syntax:
None | size: 1.25 KB | hits: 15 | expires: Never
Java Interface question regarding polymorphism
interface C {
void shutUp();
}
class A {
public void speak() {
System.out.println("Class a");
}
}
class B extends A implements C {
public void shutUp() {
System.out.println("Saying nothing...");
}
public void speak() {
System.out.println("Class B");
}
}
A obj = new B();
obj.speak()
A obj = new A();
obj.shutUp();
B obj = new B();
obj.shutUp();
obj.speak();
((C) obj).shutUp() // cast to C type
((B) obj).shutUp() // cast to B type
B obj = new B();
obj.shutUp();
C obj = new B(); // (!) but: you can't (without casting) call speak method
obj.shutUp();
A obj = new B();
try {
Method shutUp = obj.getClass().getMethod("shutUp", null);
shutUp.invoke(obj, null);
}
catch (Exception ignored) {}
A obj = new B();
public void speak() {}
B obj2 = new B();
public void shutUp() {}
B o = new B();
A aO = o;
C cO = o;
class D extends A {
public void speak(){
System.out.println("Class D");
}
}
List<A> as = new ArrayList<A>();
as.add(new A());
as.add(new B());
as.add(new D());
A a0 = as.get(0);
A a1 = as.get(1);
A a2 = as.get(2);
a0.speak(); // >> Class A
a1.speak(); // >> Class B
a2.speak(); // >> Class D