|
|
|
динамическая диспетчеризация методов
|
|||
|---|---|---|---|
|
#18+
public class Test { public static void main(String[] s) { A a = new B(); a.b(); } } class A { void a() { System.out.println("A-a"); } void b() { System.out.println("A-b"); a(); } } class B extends A { void a() { System.out.println("B-a"); } void b() { System.out.println("B-b"); super.b(); } } ответ таков: B-b A-b B-a а вот тут: public class LinkageTest{ public static class Parent{ public void test(){ System.out.println("parent::test"); } } public static class Child extends Parent{ public void test(){ System.out.println("child::test"); } } public static class Tester{ public void test(Parent obj){ System.out.println("Testing parent..."); obj.test(); } public void test(Child obj){ System.out.println("Testing child..."); obj.test(); } } public static void main(String[] args){ Parent obj = new Child(); Tester t = new Tester(); t.test(obj); } } ответ таков Testing parent... child::test почему сработало раннее связывание, хотя в предыдущем примере компилятор сразу понял что ссылке а присвается объект B, прокоментируйте пожалуйста ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2014, 18:19 |
|
||
|
динамическая диспетчеризация методов
|
|||
|---|---|---|---|
|
#18+
Может я конечно тупой, но вроде работает как надо. Что конкретно Вас удивляет? В какой строчке какое связывание? Где что присваивается? Компилятор ничего не понимай (он тупой программа, он думать и понимать не может), он просто программу по правилам выполняет. Т.ч. связывание (только я не понял где и какое) никаким к боком с никаким присваиванием (с каким?) никак НЕ связано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 14:58 |
|
||
|
динамическая диспетчеризация методов
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 17:05 |
|
||
|
динамическая диспетчеризация методов
|
|||
|---|---|---|---|
|
#18+
JongShinпочему сработало раннее связывание, хотя в предыдущем примере компилятор сразу понял что ссылке а присвается объект B, прокоментируйте пожалуйста Вообще-то в обоих случаях сработало позднее связывание -- вызвались методы из наследников. Так что я бы тоже присоединился к просьбе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2014, 17:05 |
|
||
|
динамическая диспетчеризация методов
|
|||
|---|---|---|---|
|
#18+
прошу прощения, я в этой области новичок, во 2-ом примере мы ссылке на Parent obj=new Child(); тогда почему же в классе тестер вызвался метод с параметром test(Parent obj) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2014, 13:06 |
|
||
|
динамическая диспетчеризация методов
|
|||
|---|---|---|---|
|
#18+
JongShinпрошу прощения, я в этой области новичок, во 2-ом примере мы ссылке на Parent obj=new Child(); тогда почему же в классе тестер вызвался метод с параметром test(Parent obj) avp.mk http://stackoverflow.com/questions/1572322/overloaded-method-selection-based-on-the-parameters-real-type Michael BorgwardtWhen a method is invoked (§15.12), the number of actual arguments (and any explicit type arguments) and the compile-time types of the arguments are used, at compile time, to determine the signature of the method that will be invoked (§15.12.2). If the method that is to be invoked is an instance method, the actual method to be invoked will be determined at run time, using dynamic method lookup (§15.12.4). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 11:23 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38605005&tid=2127387]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
159ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 446ms |

| 0 / 0 |
