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

2017-11-09  本文已影响0人  Artfox丶艺狸

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

上一篇下一篇

猜你喜欢

热点阅读