日期:2014-05-20  浏览次数:20815 次

关于类和构造方法的调用
本帖最后由 u013286643 于 2014-04-09 19:38:25 编辑
类是一种数据类型,那么也就可以被调用。在类中,调用它自己本身这个类作为参数,是怎么用的?有什么意义?尤其是当类尚未被完成时就被调用,会产生影响么?这种现象和递归调用有没有相似之处?
注:鄙人学习java日浅,请少用术语,详细说明,感激不尽。下面有一段代码用以帮助说明。

public class Money {
private int totalFen;

public Money(int yuan,int jiao,int fen){
this(yuan*100+jiao*10+fen); //构造方法的相互调用
}

//构造方法的重载可以提高复用,设默认值
public Money(int total){
totalFen=total;
}
    @Override  //检查java中是否有原方法
public String toString(){
return String.format("%d元%d角%d分",getYuan(),getJiao(),getFen());
}
    @Override
    public boolean equals(Object obj){
     if(obj==null) return false;
     if(this==obj) return true;
     if(obj instanceof Money) return false;
     Money m=(Money)obj;
     return this.totalFen==m.totalFen;
    }
    public Money add(Money a){
     return new Money(this.totalFen+a.totalFen);
    }
    public Money subtract(Money a){
     return new Money(this.totalFen-a.totalFen);
    }
    public Money multiply(int a){
     return new Money(this.totalFen*a);
    }

public int getYuan() {
return totalFen/100;
}


public int getJiao() {
return Math.abs(totalFen/10)%10;
}


public int getFen() {
return Math.abs(totalFen)%10;
}

}
]
------解决方案--------------------
public class Money {
private int totalFen;

public Money(int yuan,int jiao,int fen){
this(yuan*100+jiao*10+fen); //构造方法的相互调用    // 这个里面只有一个参数这个里面只有一个参数所以调用的应该是下面构造方法
}

//构造方法的重载可以提高复用,设默认值
public Money(int total){
totalFen=total;                                    //这块是把上面那个全转换成fen赋值给totalFen
}
    @Override  //检查java中是否有原方法
public String toString(){
return String.format("%d元%d角%d分",getYuan(),getJiao(),getFen());  //格式化输出
}
    @Override
    public boolean equals(Object obj){
     if(obj==null) return false;
     if(this==obj) return true;
     if(obj instanceof Money) return false;
     Money m=(Money)obj;
     return this.totalFen==m.totalFen;
    }
//上面这个重写了equals的方法,主要用来在主函数中调用进行比较
    public Money add(Money a){
     return new Money(this.totalFen+a.totalFen);
    }
    public Money subtract(Money a){
     return new Money(this.totalFen-a.totalFen);
    }
    public Money multiply(int a){
     return new Money(this.totalFen*a);
    }
//这个部分(上)是关于money的各种运算方法

public int getYuan() {
return totalFen/100;
}


public int getJiao() {
return Math.abs(totalFen/10)%10;
}


public int getFen() {
return Math.abs(totalFen)%10;
}
//这部分是取得值
}


这个类不会发生未完成现象

递归调用是把第N次(可以为任何数)的值当作第n+1次运算的基础,这个类和递归没有关联