这是书上一道例题 想每一行代码都完全弄清楚 标注的地方是我的理解 有三行代码是我不明白的 如果有任何错误的地方请指出 感谢感谢
class CashRegister{
public CashRegister() { //将CashRegister两个参数的初始值设为0
purchase = 0;
payment = 0;
}
public void recordPurchase(double amount) { //总数=0+购买金额 //purchase=total 赋值到total
double total = purchase + amount;
purchase = total;
}
public void enterPayment(double amount) { //收到付款的参数
payment = amount;
}
public double giveChange() { //找钱的参数
//double找钱=付款-价格
double change = payment - purchase;
purchase = 0; //???
payment = 0; //???
return change; //返回找钱的数值
}
private double purchase; //这里两个private是为什么?
private double payment;
}
public class CashRegisterTester{ //driver
public static void main(String[] args) { //main方法
CashRegister register = new CashRegister(); //新建一个对象register
register.recordPurchase(29.50); //购买价值29.5
register.recordPurchase(9.25); //购买价值9.25
register.enterPayment(50); //付50
double change = register.giveChange(); //新建一个change参数 调用register.giveChange方法
System.out.println(change);
}
}
> private double purchase; //这里两个private是为什么?
> private double payment;
回答:是为了存储两个变量的值。private 的意思是不让外界直接改版它们,而要通过函数 recordPurchase(), enterPayment() 来改变。
> purchase = 0; //???
> payment = 0; //???
回答:是为了清零这两个数值,表示这一笔交易结束了,为下一次交易做准备。
为什么要用private修饰两个变量?
首先Java三大特性:封装,继承和多态。(封装是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。搜索得到)封装的一种表现就是将变量私有化,只能本类调用,不允许其他的类的访问
/** * 构造函数,在对象创建的时候调用 即 new CashRegister()调用 */ public CashRegister() { //将CashRegister两个参数的初始值设为0 purchase = 0; payment = 0; } public void recordPurchase(double amount) { //总数=0+购买金额 //purchase=total 赋值到total double total = purchase + amount; purchase = total; } public void recordPurchase2(double amount) { //总数=0+购买金额 //purchase=total 赋值到total purchase += amount; } public void enterPayment(double amount) { //收到付款的参数 payment = amount; } public double giveChange() { //找钱的参数 //double找钱=付款-价格 double change = payment - purchase; purchase = 0; //???重新复制为0,为下次计算做准备,防止上次内容带到下次计算中,我觉得也可以不用要,在使用new CashRegister()会赋值一次 payment = 0; //???同上 return change; //返回找钱的数值 } /** * 这里两个private是为什么? * private是java关键字,表示属性私有化,即在本类才能访问,是java封装特性的一种方式,如果在其他类中要访问这两个属性提供公共的get,set方法即可 */ private double purchase; private double payment; /** * get方法 * @return */ public double getPurchase() { return purchase; } /** * set方法 * @param purchase */ public void setPurchase(double purchase) { this.purchase += purchase; } /** * get方法 * @return */ public double getPayment() { return payment; } /** * set方法 * @param payment */ public void setPayment(double payment) { this.payment = payment; } /** * 测试使用set 方法设置属性值 * @param args */ public static void main(String[] args) { CashRegister register = new CashRegister(); register.setPurchase(29.50); register.setPurchase(9.25); register.setPayment(50); double change = register.giveChange(); System.out.println(change); }
首先,第一行注释的地方,其实是构造函数定义,这里面的两个赋值操作可以省略,数值型的成员变量默认值就是0;
其次,第二行,记录购买金额,就是累加购买金额;
第三,设置支付金额,就是修改类的成员变量 payment。
这个就是定义了一个类,包含两个成员变量,提供了两个方法来操作这两个成员变量。