Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
3.6 Interfaces and Inheritance
Section 3.6
1
Interfaces
Client doesn't care about implementation:
public class Transactions {
public static void main(String[] args) {
QueueOfDoubles q = new QueueOfDoubles();
while (!StdIn.isEmpty()) {
q.enqueue(StdIn.readDouble());
}
for (int i = 0; !q.isEmpty(); i++) {
StdOut.println("Processing trans. " + i);
q.dequeue();
}
}
}
Section 3.6
2
Interfaces
Client doesn't care about implementation:
public interface QueueOfDoubles {
public void enqueue(double d);
public void dequeue();
public boolean isEmpty();
}
public class LinkedQueueOfDoubles implements QueueOfDoubles {
public void enqueue(double d) { ... }
public void dequeue() { ... }
public boolean isEmpty() { ... }
} public class SentinelLinkedQueueOfDoubles implements QueueOfDoubles {
public void enqueue(double d) { ... }
public void dequeue() { ... }
public boolean isEmpty() { ... }
public class RecursiveLinkedQueueOfDoubles implements QueueOfDoubles {
}
public void enqueue(double d) { ... }
public void dequeue() { ... }
public boolean isEmpty() { ... }
}
Section 3.6
3
Interfaces
Client doesn't care about implementation:
public class Transactions {
public static void main(String[] args) {
QueueOfDoubles q = new LinkedQueueOfDoubles();
while (!StdIn.isEmpty()) {
q.enqueue(StdIn.readDouble());
}
for (int i = 0; !q.isEmpty(); i++) {
StdOut.println("Processing trans. " + i);
q.dequeue();
}
}
}
Section 3.6
4
Inheritance: Specialization
"Grunt"
Section 3.6
5
Inheritance: Specialization
"Grunt"
"Woof "
Section 3.6
6
Inheritance: Specialization
"Grunt"
"Oink"
"Woof "
Section 3.6
7
Inheritance: Specialization
"Grunt"
"I t hink I taw
a puddy tat."
"Oink"
"Woof "
Section 3.6
8
Inheritance: Specialization
public class Animal {
public String toString() {
return "Grunt";
}
}
public class Dog extends Animal {
public String toString() {
return "Woof";
}
}
public class Pig extends Animal {
public String toString() {
return "Oink";
}
}
public class Bird extends Animal {
public String toString() {
return "I think I taw a puddy tat";
}
}
Section 3.6
9
Inheritance: Specialization
public class Animal {
public String toString() {
public class AnimalTest {
return "Grunt";
public static void main(String[] args) {
}
Animal a = new Animal();
}
Animal b = new Dog();
Animal c = new Pig();
public class Dog extends Animal { Animal d = new Bird();
public String toString() {
System.out.println(a);
return "Woof";
System.out.println(b);
}
System.out.println(c);
}
System.out.println(d);
}
public class Pig extends Animal {
}
public String toString() {
% java AnimalTest
return "Oink";
Grunt
}
Woof
}
public class Bird extends Animal {
public String toString() {
return "I think I taw a puddy tat";
}
}
Oink
I think I taw a puddy tat
Section 3.6
10
Inheritance: Extending Queues
Need a queue that prints the total of all its values:
• Why re-write queue from scratch
• enqueue(), dequeue(), and isEmpty() are all fine
• Just rewrite toString()!
public class SummingQueue extends LinkedQueueOfDoubles {
public String toString() {
String s = super.toString();
int sum = 0;
for (Node n = head; n != null; n = n.next)
sum += n.val;
s += "The total is " + sum;
return s;
}
}
Section 3.6
11