Advertisement
Guest User

Untitled

a guest
May 24th, 2015
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. // przyklad ma na celu zobrazowanie czym rozni sie multiple dispatch od single dispatch.
  2.  
  3. public class DispatchTest {
  4. public static void main(String[] args) {
  5. Foo foo = new Bar(); // typ statyczny: Foo, typ runtime'owy: Bar
  6. A a = new B(); // typ statyczny: A, typ runtime'owy: B
  7. foo.fooMethod(a); // wolamy tak, by dac szanse kompilatorowi sie wykazac (dwa razy inny typ
  8. // dynamiczny i statyczny)
  9. }
  10. }
  11.  
  12. class Foo {
  13. void fooMethod(A a) {
  14. System.out.println("Foo::fooMethod(A)");
  15. a.aMethod();
  16. }
  17.  
  18. void fooMethod(B b) {
  19. System.out.println("Foo::fooMethod(B)");
  20. b.aMethod();
  21. }
  22. }
  23.  
  24. class Bar extends Foo {
  25. // single dispatch! kompilator wzial pod uwage typ runtime'owy tylko
  26. // "wyroznionego" argumentu przed kropka.
  27. void fooMethod(A a) {
  28. System.out.println("Bar::fooMethod(A)");
  29. a.aMethod();
  30. }
  31.  
  32. // gdybysmy mieli multiple dispatch, to wywolaloby sie to.
  33. // (wziety pod uwage runtime'owy typ obydwu argumentow na raz)
  34. void fooMethod(B b) {
  35. System.out.println("Bar::fooMethod(B)");
  36. b.aMethod();
  37. }
  38. }
  39.  
  40. class A {
  41. void aMethod() {
  42. System.out.println("A::aMethod");
  43. }
  44. }
  45.  
  46. class B extends A {
  47. // nawet pomimo single-dispatch wywola sie ta metoda:
  48. // wybor typu runtime'owego nastapi dopiero przy wywolaniu w linii 28
  49. void aMethod() {
  50. System.out.println("B::aMethod");
  51. }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement