|
|
Read the [Java program].
Pay particular attention to show(), its formal parameters,
the calls of show(), and their actual parameters.
Predict what the program does.
| stack | objects |
| by new( ) | class (objects) |
|
|
|
| #3: |
| superObj |
| class=SuperClass |
| memberVar=... |
|
|
|
|
| #1: |
| SuperClass |
| Super |
| staticVar=... |
| method( ) |
| method2( ) |
|
| |
| --->Object |
| |
| --->code2 |
| --->code3 |
|
|
| #4: |
| subObj |
| class=SubClass |
memberVar=... (shadowed!) |
| memberVar=... |
|
|
|
| #2: |
| SubClass |
| Super |
| staticVar=... |
method( ) (overrides) |
| method2( ) |
|
| --->#1 |
| |
--->code4 |
| --->code3 |
|
|
After making your predictions,
run the program and look at the output.
Were your predictions correct?
main -- static
code0:...
SuperClass.new() -- #1.new()
SubClass.new() -- #2.new()
...
show(#3, #4) -- i.e. code1
show(#4, #4) -- i.e. code1
...
return
|
show(p0, p1) -- static
code1:...
p0.method(p0)
-- i.e. p0.class.method(p0)
p0.method2(p0)
-- i.e. p0.class.method2(p0)
...
p1.method(p1)
-- i.e. p1.class.method(p1)
p1.method2(p1)
-- i.e. p1.class.method2(p1)
...
return
|
method[p](this) -- in SuperClass
code2:...
...
return
|
method2(this) -- in SuperClass
code3:...
...memberVar...
-- this.memberVar[p]
...
method(this)
-- ie this.class.method(this)
...
return
|
method[b](this) -- in SubClass
code4:...
...
return
|
(method2(this) -- ^above^,
inherited by SubClass)
|
| -- LA 26/10/2004
|
|
|