Java Inheritance Polymorphism
Java Inheritance Polymorphism
[email protected]
www.dre.vanderbilt.edu/~schmidt
Institute for Software
Integrated Systems
Vanderbilt University
Nashville, Tennessee, USA
Java Frameworks
& Callbacks
3
See www.dre.vanderbilt.edu/~schmidt/frameworks.html
4
Application
Code
Framework
Code
Register
for event
Event
occurs
Event
occurs
See en.wikipedia.org/wiki/Event-driven_programming
5
Application
Code
Framework
Code
Register
for event
Event
occurs
Event
occurs
Application
Code
Framework
Code
Register
for event
Event
occurs
Event
occurs
Application
Code
Framework
Code
Register
for event
Event
occurs
Event
occurs
Application
Code
Framework
Code
Register
for event
Event
occurs
Event
occurs
Application
Code
Framework
Code
Register
for event
Event
occurs
Event
occurs
10
Application
Code
Framework
Code
Register
for event
Event
occurs
Event
occurs
11
12
See www.dre.vanderbilt.edu/~schmidt/Coursera/articles/hollywood-principle.txt
13
14
15
16
Application-specific
functionality
Domain-specific functionality
for Android programs
17
Application-specific
functionality
Domain-specific functionality
for Android programs
Application-specific
functionality
Provide a semi-complete
application
Domain-specific functionality
for Android programs
19
Hook
method
Application-specific
functionality
Hook
method
Provide a semi-complete
application
Hook methods plug app
logic into the framework
Domain-specific functionality
for Android programs
Provide a semi-complete
application
Hook methods plug app
logic into the framework
Mediate interactions among
common abstract & variant
concrete classes/interfaces
Application-specific
functionality
Hook
method
Domain-specific functionality
for Android programs
22
See developer.android.com/training/multiple-threads/communicate-ui.html
23
An applications lifecycle
methods are called back by
Androids Activity framework
e.g., onCreate(), onStart(),
onStop(), onDestroy(), etc.
See developer.android.com/training/basics/activity-lifecycle
24
An applications lifecycle
methods are called back by
Androids Activity framework
A listener for button clicks is
called back by Androids GUI
framework
GUI Component
(a button)
25
public void
onClick(View v){
...
}
ClickListener
Object
See docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html
26
Thread
1.submit(callable)
submit()
run()
2.offer()
WorkerThreads
callable
WorkQueue
3.take()
4.call()
callable
ExecutorService
See docs.oracle.com/javase/tutorial/essential/concurrency/executors.html
27
Abstraction
OOP
Polymorphism
29
Inheritance
30
Anonymous instance of an
anonymous inner class
31
Anonymous instance of
a lambda expression
32
Overview of
Java Inheritance
33
package java.util;
/ This class would reside in
public class Stack<E> {
extends Vector<E> {
...
See docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
34
package java.util;
/ This class would reside in
public class Stack<E> {
extends Vector<E> {
...
See docs.oracle.com/javase/tutorial/java/IandI/subclasses.html
35
package java.util;
/ This class would reside in
public class Stack<E> {
extends Vector<E> {
36
package java.util;
/ This class would reside in
public class Stack<E> {
extends Vector<E> {
37
package java.util;
/ This class would reside in
public class Stack<E> {
extends Vector<E> {
e.g.,
Stack<Integer> s =
new Stack<>();
if(!s.isEmpty())
s.pop();
e.g.,
Stack<Integer> s =
new Stack<>();
if(!s.isEmpty())
s.pop();
39
package java.util;
/ This class would reside in
public class Stack<E> {
extends Vector<E> {
public Object push(E e){
addElement(e);
return e;
}
40
package java.util;
/ This class would reside in
public class Stack<E> {
extends Vector<E> {
public Object push(E e){
addElement(e);
return e;
}
41
42
43
Method overriding
44is covered shortly
package java.lang;
in
public class Object {
...
public final void wait();
public final void notify();
public final void notifyAll();
public final boolean equals
(Object o);
...
See docs.oracle.com/javase/7/docs/api/java/lang/Object.html
45
package java.lang;
in
public abstract class Process {
...
public abstract int waitFor()
...;
...
46
Object
wait()
notify();
notifyAll();
equals();
Process
waitFor()
47
Object
wait()
notify();
notifyAll();
equals();
Process
waitFor()
48
Object
wait()
notify();
notifyAll();
equals();
Process
waitFor()
49
Overview of Java
Polymorphism
We examine a concrete &50
complete example in detail
AbstractMap<K,V>
entrySet()
put()
AbstractMap<K,V>
entrySet()
put()
See docs.oracle.com/javase/7/docs/api/java/util/AbstractMap.html
52
TreeMap<K,V>
entrySet()
put()
AbstractMap<K,V>
entrySet()
put()
HashMap<K,V>
entrySet()
put()
Concurrent
HashMap<K,V>
entrySet()
put()
See github.com/douglascraigschmidt/CS251/tree/master/ex/DynamicBinding
54
AbstractMap
0
Pointer to vtable
Pointer to method1
4
8
keySet field1
Pointer to method2
values field2
Pointer to methodn
HashMap
0
Pointer to vtable
Pointer to method1
4
8
keySet field1
Pointer to method2
values field2
Pointer to methodn
12
16
20
table field1
other fields
entrySet field2
size field3
Method1 bytecode
Method2 bytecode
Methodn bytecode
Method1 bytecode
Method2 bytecode
Methodn bytecode
See en.wikipedia.org/wiki/Dynamic_dispatch
55
Java Collections
Framework
56
See docs.oracle.com/javase/8/docs/technotes/guides/collections
57
58
59
60
61
Inter
face
Hash
Table
Set
HashSet
Resize
Array
Balanced
Tree
Linked List
Linked
Hash
Set
Tree
Set
List
Array
List
LinkedList
Deque
Array
Deque
LinkedList
Map
HashMap
TreeMap
Hash Table+
Linked List
Linked
Hash
Map
63
64
65
66
67
import java.util.ArrayList;
...
List<String> myList =
new ArrayList<>();
myList.add("foo");
myList.add("bar");
myList.add("foobar");
// List stores object of type
// java.lang.String, so no need
// to cast item back to String
String itemOne = myList.get(0);
myList.remove(0);
See docs.oracle.com/javase/8/docs/technotes/guides/collections
68...
import java.util.HashMap;
...
HashMap<String, Foo> myMap =
new HashMap<>();
Foo f1 = new Foo();
Foo f2 = new Foo();
myMap.put("one", f1);
myMap.put("two", f2);
if (f2 == myMap.get("two"))
...
else if (f1 ==
myMap.get("one"))
...
69
70
Iterating Through
Collections in Java
72
ArrayList<String> myStrings =
new ArrayList<>();
myStrings.add("a");
myStrings.add("b");
myStrings.add("c");
for(int i = 0;
i < myStrings.size();
i++) {
System.out.println
(myStrings.get(i));
}
Venerable,73
but crufty
ArrayList<String> myStrings =
new ArrayList<>();
myStrings.add("a");
myStrings.add("b");
myStrings.add("c");
for (String aString :
myStrings) {
System.out.println(aString);
}
Very clean
74& concise
ArrayList<String> myStrings =
new ArrayList<>();
myStrings.add("a");
myStrings.add("b");
myStrings.add("c");
for (Iterator<String> it =
myStrings.iterator();
it.hasNext();
) {
System.out.println
(it.next());
}
ArrayList<String> myStrings =
new ArrayList<>();
myStrings.add("a");
myStrings.add("b");
myStrings.add("c");
myStrings
.stream()
.forEach
(aString ->
System.out.println
(aString));