没有set方法,反射会报错。有set方法,方法里可以做一些判断防止非法值。比直接public还是要灵活一些。
私有公有都是上层概念,反正都是内存区域,你想要改,怎么都能改,比如在java里面通过反射,比如玩游戏用的内存修改器[捂脸]
C++申明为const常量,访问常量变量地址一样能修改内存数据,C++中声明为private,通过对象地址和便宜地址一样可以修改private成员。
都是编译器约定而已,java更高级,修改更方便。
之前修改别人的代码,但是有个pojo是依赖进来的,不能修改。只能建一个类继承它,加拓展属性。就用反射复制属性过来。
反射有它特定的应用场景,一般用于框架的建设比较多。像我们比较熟悉的Spring框架就用了反射技术,开发人员日常编码是比较少用反射的,再加上反射的性能不高,所以每项技术的出现都是有它特定原因的。。
你没发现反射访问是很费力吗?,private的意义就在于没想让人访问,而JAVA反射的开发在于实现这个功能而已,其实在开发之初也没想到你用反射只是为了访问一个私有的变量。
要从不同角度来看待private和反射。
private代表了封装,是面向对象的体现。而反射是java这门语言的特性之一,为了提供更加灵活和高级的操作。
所以框架一般会用到反射,用于做一些aop等。而我们的业务代码要面向对象编程,便于复用扩展维护。
换句话说,反射更加底层,底层是不需要oop的。
很高兴能回答你的问题:
总上所述,private只是个约定而已。
回到顶部