interface Countable {
float getValue();
String getName();
}
class Book implements Countable {
private String description = "books";
private float value = 0.75f;
public float getValue() {
return value;
}
public String getName() {
return description;
}
}
class Dog implements Countable {
private String description = "dogs";
private float cost = 1;
public float getValue() {
return cost;
}
public String getName() {
return description;
}
}
class Cat implements Countable {
private float cost = 1;
private String description = "Cat";
public float getValue() {
return cost;
}
public String getName() {
return description;
}
}
class Child implements Countable {
private float cost = 1;
private String description = "child";
public float getValue() {
return cost;
}
public String getName() {
return description;
}
}
class Cow implements Countable {
private float cost = 1.25f;
private String description = "Cow";
public float getValue() {
return cost;
}
public String getName() {
return description;
}
}
abstract class Number implements Countable {
protected Countable component;
public Number(Countable component) {
this.component = component;
}
public float getValue() {
return component.getValue();
}
public String getName() {
return component.getName();
}
}
class MyBook extends Number {
private float cost = 0.75f;
public MyBook(Countable component) {
super(component);
}
public String getName() {
return component.getName() + " my books";
}
public float getValue() {
return cost + component.getValue();
}
}
class Integer extends Number {
private float cost = 0.50f;
public Integer(Countable component) {
super(component);
}
public float getValue() {
return cost + component.getValue();
}
public String getName() {
return component.getName() + " integer";
}
}
class Float extends Number {
public Float(Countable component) {
super(component);
}
public String getName() {
return component.getName() + " float";
}
}
class Double extends Number {
public Double(Countable component) {
super(component);
}
public String getName() {
return component.getName() + " double";
}
}
class Decimal extends Number {
public Decimal(Countable component) {
super(component);
}
public String getName() {
return component.getName() + " decimal";
}
}
public class CountableDemo {
public static void main(String[] args) {
Countable cappuccino = new Cat();
System.out.println(cappuccino.getName() + ": $" + cappuccino.getValue());
Countable cafeMocha = new Integer(new Float(new Cow()));
System.out.println(cafeMocha.getName() + ": $" + cafeMocha.getValue());
}
}
|