关于类和构造方法的调用
本帖最后由 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次运算的基础,这个类和递归没有关联