在java中,好多人奇怪,把一个变量设置为 public 和设置为 private ,但是提供 get/set 有什么区别呢?并且使用 private 增加代码量,是吧。
我在网上也找了很久,答案什么的都有吧,主要认为提高程序安全,还有就是可以在get/set方法里面作些处理。但是到目前还没有看到满意的,刚好今天在和朋友讨论一个变量作用域的时候有个发现,先看代码吧:
public class BaseVar {
public int id = 5;
}
public class ChildVar extends BaseVar {
public int id = 2;
}
public class Test {
public static void main(String[] args){
BaseVar baseVar = new ChildVar();
System.out.print(baseVar.id);
ChildVar childVar = new ChildVar();
System.out.print(childVar.id);
}
}
那么大家思考下,会输出什么?自己运行一下验证一下结果。
下面修改下程序,字类不变:
public class BaseVar {
public int id = 5;
public int getId(){
return id;
}
}
public class ChildVar extends BaseVar {
public int id = 2;
}
public class Test {
public static void main(String[] args){
BaseVar baseVar = new ChildVar();
System.out.print(baseVar.getId());
ChildVar childVar = new ChildVar();
System.out.print(childVar.getId());
}
}
那么这样又会有什么样的结果呢?大家可以试试把 id 修改不private 试试。
那我们在做下修改:这次只在子类上加一个方法:
public class BaseVar {
public int id = 5;
public int getId(){
return id;
}
}
public class ChildVar extends BaseVar {
public int id = 2;
@Override
public int getId() {
return id;
}
}
public class Test {
public static void main(String[] args){
BaseVar baseVar = new ChildVar();
System.out.print(baseVar.getId());
ChildVar childVar = new ChildVar();
System.out.print(childVar.getId());
}
}
这次的结果又如何呢?大家自己运行验证。
所以在程序中,我们使用 private 来定义属性,这样在有子类的时候,即使定义了相同的属性,在使用父类接收时,可以控制我想获得的是子类的还是父类的,可能还是有欠缺的地方,就当一个记录,有新的想法了在来完善
网友评论