class Test { public static void main(String[] args) { Number n1 = new Number(3); Number n2 = new RationalNumber(9,3); System.out.println(n1.squee()); System.out.println(n2.squee()); } } class Number { protected double value; public Number(double value) { this.value = value; } public String toString() { return String.valueOf(value); } public double getValue() { return value; } public Number minus(Number other) { return new Number(getValue() - other.getValue()); } public Number times(Number other) { return new Number(getValue() * other.getValue()); } public Number abs() { if (value > 0) { return new Number(-value); } else { return this; } } public String squee() { String s = "squee"; for (int i = 0; i < value; i++) { s += "e"; } return s; } } class RationalNumber extends Number { protected double numerator; protected double denominator; public RationalNumber(double numerator, double denominator) { super(numerator / denominator); this.numerator = numerator; this.denominator = denominator; } public double getValue() { return numerator / denominator; } public String toString() { return String.valueOf(numerator) + "/" + String.valueOf(denominator); } }