我对封装规则和下两个类之间的区别有疑问
class Phone {
public String model;
double weight;
public void setWeight(double w){
weight = w;
}
public double getWeight(){
return weight;
}
}
class Home {
public static void main(String[] args) {
Phone ph = new Phone();
ph.setWeight(12.23);
System.out.println(ph.getWeight());
}
}
在Java for ICA认证书中,这是封装良好的类的例子 从set和get方法我们可以访问权重变量和pritns 12.23。
但让我困惑的是下一堂课:
class Employee {
int age;
void modifyVal(int age) { // even if parameter is d instead age prints the same
age = age + 1; // even if parameter is d instead age prints the same
System.out.println(age);
}
}
class Office {
public static void main(String args[]) {
Employee e = new Employee();
System.out.println(e.age);
e.modifyVal(e.age);
System.out.println(e.age);
}
}
打印: 010
意味着方法modifyVal无法访问年龄变量。有人可以解释为什么变量在应用modufyVal方法后没有变化,有什么区别?
答案 0 :(得分:2)
在modifyVal
方法中,age
上的操作范围限定为方法的age
参数,而不是类实例的this.age
。
因此this.age
不会增加。
答案 1 :(得分:0)
age = age + 1;
必须是
this.age = age + 1;
当实例变量和方法变量具有相同的名称时,您必须告诉java您正在操作哪一个。如果没有this
,它将采用方法变量,因此您应该使用this.age
。
答案 2 :(得分:0)
void modifyVal(int age) {
age = age + 1; // not modifying age field of Employee class. local age field being passed to the function is being changed.
System.out.println(age);
}
System.out.println(e.age); // 0 : default value
e.modifyVal(e.age); // 1 : as age = age + 1; i.e, 0+1
System.out.println(e.age); // 0 : default value
答案 3 :(得分:0)
这是因为这一行:
age = age + 1; //it's overwriting age parameter and not accessing age instance variable
如果是这样的话,它会修改age
实例变量
this.age = age + 1;