abstract class Number{
private Integer m_number;
Number(Integer m_number){
this.m_number=m_number;
}
public Integer getInteger(){
return m_number;
}
Number add(Number a,Number b){
return new Number(new Integer(a.getInteger().intValue()+
b.getInteger().intValue()));
}
String toString(){
return getInteger().toString();
}
}
class One extends Number{
static Number cached_one=new Number(Integer.parseInt(BigInteger.ONE.toString())); //cached for efficiency
static Number createNumberOne(){
return cached_one;
}
}
class Main{
public static void main(String[] args){
Number result=One.createNumberOne().add(One.createNumberOne());
System.out.println(result); //result.toString() is invoked here
}
}
Name:
Anonymous2010-04-10 17:08
>>4
Thanks, originally Number was abstract because I also wanted to implement the Two class and then do some if/switch statement logic in add to find the result. Also ideally Number would implement the "Addable" interface. I got lazy though :(.