Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 26th, 2012  |  syntax: None  |  size: 1.25 KB  |  hits: 15  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Java Interface question regarding polymorphism
  2. interface C {
  3.     void shutUp();
  4. }
  5.  
  6. class A {
  7.     public void speak() {
  8.        System.out.println("Class a");
  9.     }
  10. }
  11.  
  12. class B extends A implements C {
  13.     public void shutUp() {
  14.         System.out.println("Saying nothing...");
  15.     }
  16.  
  17.     public void speak() {
  18.         System.out.println("Class B");
  19.     }
  20. }
  21.        
  22. A obj = new B();
  23. obj.speak()
  24.        
  25. A obj = new A();
  26. obj.shutUp();
  27.        
  28. B obj = new B();
  29. obj.shutUp();
  30. obj.speak();
  31.        
  32. ((C) obj).shutUp() // cast to C type
  33. ((B) obj).shutUp() // cast to B type
  34.        
  35. B obj = new B();
  36. obj.shutUp();
  37.        
  38. C obj = new B(); // (!) but: you can't (without casting) call speak method
  39. obj.shutUp();
  40.        
  41. A obj = new B();
  42. try {
  43.     Method shutUp = obj.getClass().getMethod("shutUp", null);
  44.     shutUp.invoke(obj, null);
  45. }
  46. catch (Exception ignored) {}
  47.        
  48. A obj = new B();
  49.        
  50. public void speak() {}
  51.        
  52. B obj2 = new B();
  53.        
  54. public void shutUp() {}
  55.        
  56. B o = new B();
  57. A aO = o;
  58. C cO = o;
  59.        
  60. class D extends A {
  61.     public void speak(){
  62.         System.out.println("Class D");
  63.     }
  64. }
  65.  
  66. List<A> as = new ArrayList<A>();
  67. as.add(new A());
  68. as.add(new B());
  69. as.add(new D());
  70.  
  71. A a0 = as.get(0);
  72. A a1 = as.get(1);
  73. A a2 = as.get(2);
  74.  
  75. a0.speak(); // >> Class A
  76. a1.speak(); // >> Class B
  77. a2.speak(); // >> Class D