fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. class Tester {
  8.  
  9.  
  10. public static abstract class A {
  11. abstract void work();
  12. void huh(Tester t) {
  13. t.make(this);
  14. }
  15. }
  16. public static class B extends A {
  17. @Override
  18. void work() {
  19. System.out.println("B");
  20. }
  21.  
  22.  
  23. }
  24.  
  25. public static class C extends A {
  26. @Override
  27. void work() {
  28. System.out.println("C");
  29. }
  30. }
  31.  
  32. public static class BB extends B {
  33. @Override
  34. void work() {
  35. System.out.println("BB");
  36. }
  37. }
  38.  
  39.  
  40.  
  41. void make(A a) {
  42. a.work();
  43. System.out.println("A generic");
  44. }
  45.  
  46. void make(B b) {
  47. b.work();
  48. System.out.println("B overload");
  49. }
  50.  
  51. void make(BB b) {
  52. b.work();
  53. System.out.println("BB overload");
  54. }
  55.  
  56. void make(C c) {
  57. c.work();
  58. System.out.println("C overload");
  59. }
  60.  
  61.  
  62.  
  63.  
  64. public static class Tester2 extends Tester {
  65.  
  66. @Override
  67. void make(A a) {
  68.  
  69. super.make(a);
  70. System.out.println("Tester2");
  71. }
  72.  
  73. @Override
  74. void make(B b) {
  75.  
  76. super.make(b);
  77. System.out.println("Tester2");
  78. }
  79.  
  80. @Override
  81. void make(BB b) {
  82.  
  83. super.make(b);
  84. System.out.println("Tester2");
  85. }
  86.  
  87. @Override
  88. void make(C c) {
  89.  
  90. super.make(c);
  91. System.out.println("Tester2");
  92. }
  93.  
  94.  
  95.  
  96.  
  97. }
  98.  
  99.  
  100.  
  101. public static void main(String[] args) {
  102.  
  103. Tester t = new Tester();
  104. Tester t2 = new Tester2();
  105. B b = new B();
  106. BB bb = new BB();
  107. C c = new C();
  108.  
  109. A ab = new B();
  110. A abb = new BB();
  111. A ac = new C();
  112.  
  113. B bbb = new BB();
  114.  
  115.  
  116. t.make(b);
  117. t.make(bb);
  118. t.make(c);
  119. System.out.println("\n");
  120. t.make(ab);
  121. t.make(abb);
  122. t.make(ac);
  123. System.out.println("\n");
  124. t.make(bbb);
  125. System.out.println("\n");
  126.  
  127. b.huh(t);
  128. bb.huh(t);
  129. c.huh(t);
  130. System.out.println("\n");
  131. b.huh(t2);
  132. bb.huh(t2);
  133. c.huh(t2);
  134.  
  135.  
  136.  
  137. }
  138.  
  139. }
Success #stdin #stdout 0.07s 380224KB
stdin
Standard input is empty
stdout
B
B overload
BB
BB overload
C
C overload


B
A generic
BB
A generic
C
A generic


BB
B overload


B
A generic
BB
A generic
C
A generic


B
A generic
Tester2
BB
A generic
Tester2
C
A generic
Tester2