1
COMP 250
Lecture 34 Polymorphism (continued.) Garbage Collection
(mark and sweep)
- Nov. 27, 2017
COMP 250 Lecture 34 Polymorphism (continued.) Garbage Collection - - PowerPoint PPT Presentation
COMP 250 Lecture 34 Polymorphism (continued.) Garbage Collection (mark and sweep) Nov. 27, 2017 1 Recall last lecture class Dog String serialNumber Person owner void bark() {print woof}
1
2
class Dog String serialNumber Person owner void bark() {print “woof”} : class Beagle void hunt () void bark() {print “aowwwuuu”} extends
3
class Dog String serialNumber Person owner void bark() {print “woof”} : class Beagle void hunt () void bark() {print “aowwwuuu”} extends
Beagle
Beagle bark() class descriptor Dog bark() class descriptor getSuperClass() getClass() Object class descriptor getSuperClass() myDog
4
This figure shows objects in a running Java program.
Beagle class descriptor Dog class descriptor Object class descriptor TestDog main() class descriptor
Beagle class descriptor Dog class descriptor Object class descriptor
TestDog main() class descriptor
TestDog.main()
D
6
There are no
start of execution.
Beagle class descriptor Dog class descriptor Object class descriptor
TestDog.main()
Dog myDog
TestDog class descriptor null
7
Beagle class descriptor Dog class descriptor Object class descriptor
TestDog.main()
Dog myDog
Beagle()
TestDog class descriptor null
8
Beagle
Beagle class descriptor Dog class descriptor Object class descriptor
TestDog.main()
Dog myDog TestDog class descriptor
(after constructor is done)
9
Beagle
Beagle bark() class descriptor Dog bark() class descriptor Object class descriptor
TestDog.main()
Dog myDog
bark() this
TestDog class descriptor
JVM looks for the bark() method in this.getClass() and finds it.
10
Beagle
Beagle class descriptor Dog getOwner() class descriptor Object class descriptor
TestDog.main()
Dog myDog
getOwner() this
TestDog class descriptor
JVM looks for the getOwner() method in this.getClass() and doesn’t find it.
11
Beagle
Beagle class descriptor Dog getOwner() class descriptor Object class descriptor
TestDog.main()
Dog myDog
getOwner() this JVM then looks for the getOwner() method in this.getClass().getSuperclass() and finds it.
TestDog class descriptor
JVM looks for the getOwner() method in this.getClass() and doesn’t find it.
12
Beagle
Beagle class descriptor Dog class descriptor Object class descriptor
TestDog.main() mA()
Local variables and method parameters are here Object instance fields are here Methods are here TestDog class descriptor
13
mB()
14
15
Beagle
“Bob”
Beagle class descriptor
Test.main()
Dog myDog
Test class descriptor
descriptors
16
Terrier class descriptor
Beagle
“Bob”
Beagle class descriptor
Test.main()
Dog myDog
Test class descriptor
descriptors
Terrier
“Tim”
Terrier class descriptor
Bob is garbage.
17
Beagle class descriptor mA()
Test class descriptor
descriptors
Terrier
“Tim” Test.main()
Dog myDog mB() mC()
Beagle
“Bob”
Terrier class descriptor
18
mA()
Terrier
“Tim” Test.main()
Dog myDog mB() mC()
Beagle
“Bob”
19
Beagle class descriptor Test class descriptor
descriptors Terrier class descriptor
Terrier object “Tim”
another garbage object
Beagle object “Bob”
20
mA()
main()
mB() mC()
Terrier object “Tim”
another garbage object
Beagle object “Bob”
mA()
main()
mB() mC()
21
22
Terrier object “Tim”
another garbage object
Beagle object “Bob”
mA()
main()
mB() mC()
23
Object A Object B
24
25
Terrier object “Tim”
another garbage object
Beagle object “Bob”
mA()
main()
mB() mC()
26
27
Terrier object “Tim”
another garbage object
Beagle object “Bob”
mA()
main()
mB() mC()
28
Terrier object “Tim”
mA()
main()
mB() mC()
29
remove node from list remove node From list
mA()
main()
mB() mC()
Terrier object “Tim”
30
mA()
main()
mB() mC()
31
Terrier object “Tim” new object
Terrier object “Tim”
mA()
main()
mB() mC()
32
new object new node in
mA()
main()
mB() mC()
33
Terrier object “Tim” new object
34