
class BProtcol {
void m1() { ... }
void m2() { ... }
void m3() { ... }
}
class Dictionary
void add(Key k, Value v) { ... }
Value find(Key k) { ... }
void delete(Key k) { ... }
class LinkedListDictionary
void add(Key k, Value v) { ... }
Value find(Key k) { ... }
void delete(Key k) { ... }
class HashTableListDictionary
void add(Key k, Value v) { ... }
Value find(Key k) { ... }
void delete(Key k) { ... }
|
|
|
extends class modifier signals inheritance:
class Child extends Parent { ... }
class Dictionary {
void add(Key k, Value v) { ... }
Value find(Key k) { ... }
void delete(Key k) { ... }
}
class LinkedListDictionary
extends Dictionary {
}
class Blob { ... }
class Spot extends Blob { ... }
class Drop extends Blob { ... }
|
|
|
class Blob { ... }
class Spot extends Blob { ... }

classInstance instanceof Class
returns true if classInstance's type (that is, class) is an descendant
of Class and false otherwise.
class Blob { void moo() { ... } }
class Spot
extends Blob { void moo() { ... } }
class Drop
extends Spot { void moo() { ... } }consider
Blob b = new Drop(); b.moo();
Which version of moo() gets called?
class Blob
void moo(int) { ... }
class Spot
extends Blob
void moo(double) { ... }
|
|
Blob b = new Spot(); b.moo();
|
super keyword to control lookup.
super.method(args) call the parent's
method.
this.method(args) calls
method in the instance's class.
java.lang.String is a final class.
class Set {
// blah blah blah
void add(Object element) { ... }
void add(Set set) { ... }
// blah blah blah
}
class CountingSet extends Set
private int count = 0
void add(Object element)
count++
super.add(element)
void add(Set set)
count += set.size()
super.add(set)
int getCount()
return count
CountingSet cs1 = new CountingSet()
cs1.add("Moe")
cs1.add("Manny")
cs1.add("Jack")
CountingSet cs2 = new CountingSet()
cs2.add(cs1)
System.out.printlin(
"Add count: " + cs2.getCount())
Add count: 6 when run. Why?
Set.add(Set) is implemented as
void add(Set set)
for (Object e: set.elements)
/* this. */add(e)

See the code.