美文网首页
Java为什么属性大多为私有的,却提供get/set方法

Java为什么属性大多为私有的,却提供get/set方法

作者: Artfox丶艺狸 | 来源:发表于2017-11-09 13:56 被阅读0次

    在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 来定义属性,这样在有子类的时候,即使定义了相同的属性,在使用父类接收时,可以控制我想获得的是子类的还是父类的,可能还是有欠缺的地方,就当一个记录,有新的想法了在来完善

    相关文章

      网友评论

          本文标题:Java为什么属性大多为私有的,却提供get/set方法

          本文链接:https://www.haomeiwen.com/subject/xebpmxtx.html