2015-09-07 11:44:36 -06:00
|
|
|
|
// polymorphism/Frog.java
|
2015-06-15 17:47:35 -07:00
|
|
|
|
// <20>2015 MindView LLC: see Copyright.txt
|
|
|
|
|
// Cleanup and inheritance.
|
|
|
|
|
package polymorphism;
|
|
|
|
|
import static com.mindviewinc.util.Print.*;
|
|
|
|
|
|
|
|
|
|
class Characteristic {
|
|
|
|
|
private String s;
|
|
|
|
|
Characteristic(String s) {
|
|
|
|
|
this.s = s;
|
|
|
|
|
print("Creating Characteristic " + s);
|
|
|
|
|
}
|
|
|
|
|
protected void dispose() {
|
|
|
|
|
print("disposing Characteristic " + s);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class Description {
|
|
|
|
|
private String s;
|
|
|
|
|
Description(String s) {
|
|
|
|
|
this.s = s;
|
|
|
|
|
print("Creating Description " + s);
|
|
|
|
|
}
|
|
|
|
|
protected void dispose() {
|
|
|
|
|
print("disposing Description " + s);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class LivingCreature {
|
|
|
|
|
private Characteristic p =
|
|
|
|
|
new Characteristic("is alive");
|
|
|
|
|
private Description t =
|
|
|
|
|
new Description("Basic Living Creature");
|
|
|
|
|
LivingCreature() {
|
|
|
|
|
print("LivingCreature()");
|
|
|
|
|
}
|
|
|
|
|
protected void dispose() {
|
|
|
|
|
print("LivingCreature dispose");
|
|
|
|
|
t.dispose();
|
|
|
|
|
p.dispose();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class Animal extends LivingCreature {
|
|
|
|
|
private Characteristic p =
|
|
|
|
|
new Characteristic("has heart");
|
|
|
|
|
private Description t =
|
|
|
|
|
new Description("Animal not Vegetable");
|
|
|
|
|
Animal() { print("Animal()"); }
|
|
|
|
|
@Override
|
|
|
|
|
protected void dispose() {
|
|
|
|
|
print("Animal dispose");
|
|
|
|
|
t.dispose();
|
|
|
|
|
p.dispose();
|
|
|
|
|
super.dispose();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class Amphibian extends Animal {
|
|
|
|
|
private Characteristic p =
|
|
|
|
|
new Characteristic("can live in water");
|
|
|
|
|
private Description t =
|
|
|
|
|
new Description("Both water and land");
|
|
|
|
|
Amphibian() {
|
|
|
|
|
print("Amphibian()");
|
|
|
|
|
}
|
|
|
|
|
@Override
|
|
|
|
|
protected void dispose() {
|
|
|
|
|
print("Amphibian dispose");
|
|
|
|
|
t.dispose();
|
|
|
|
|
p.dispose();
|
|
|
|
|
super.dispose();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class Frog extends Amphibian {
|
|
|
|
|
private Characteristic p = new Characteristic("Croaks");
|
|
|
|
|
private Description t = new Description("Eats Bugs");
|
|
|
|
|
public Frog() { print("Frog()"); }
|
|
|
|
|
@Override
|
|
|
|
|
protected void dispose() {
|
|
|
|
|
print("Frog dispose");
|
|
|
|
|
t.dispose();
|
|
|
|
|
p.dispose();
|
|
|
|
|
super.dispose();
|
|
|
|
|
}
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
Frog frog = new Frog();
|
|
|
|
|
print("Bye!");
|
|
|
|
|
frog.dispose();
|
|
|
|
|
}
|
2015-09-07 11:44:36 -06:00
|
|
|
|
}
|
|
|
|
|
/* Output:
|
2015-06-15 17:47:35 -07:00
|
|
|
|
Creating Characteristic is alive
|
|
|
|
|
Creating Description Basic Living Creature
|
|
|
|
|
LivingCreature()
|
|
|
|
|
Creating Characteristic has heart
|
|
|
|
|
Creating Description Animal not Vegetable
|
|
|
|
|
Animal()
|
|
|
|
|
Creating Characteristic can live in water
|
|
|
|
|
Creating Description Both water and land
|
|
|
|
|
Amphibian()
|
|
|
|
|
Creating Characteristic Croaks
|
|
|
|
|
Creating Description Eats Bugs
|
|
|
|
|
Frog()
|
|
|
|
|
Bye!
|
|
|
|
|
Frog dispose
|
|
|
|
|
disposing Description Eats Bugs
|
|
|
|
|
disposing Characteristic Croaks
|
|
|
|
|
Amphibian dispose
|
|
|
|
|
disposing Description Both water and land
|
|
|
|
|
disposing Characteristic can live in water
|
|
|
|
|
Animal dispose
|
|
|
|
|
disposing Description Animal not Vegetable
|
|
|
|
|
disposing Characteristic has heart
|
|
|
|
|
LivingCreature dispose
|
|
|
|
|
disposing Description Basic Living Creature
|
|
|
|
|
disposing Characteristic is alive
|
2015-09-07 11:44:36 -06:00
|
|
|
|
*/
|