美文网首页
private变量修饰符

private变量修饰符

作者: 且随意 | 来源:发表于2019-03-25 17:24 被阅读0次

private修饰的方法可通过反射访问,那么private的意义是什么?

可以修饰成员变量和成员方法,如果类的成员被private访问控制符修饰,则这个成员只能被该类的其他成员访问,其他类无法直接访问。类的良好封装就是通过private关键字实现的。

但是俗话说没有不透风的墙。我们可以利用java中的反射从而在外界调用private的变量或方法

不是为了绝对安全性设计的,是用来约束用户常规使用JAVA的方式。这就像是一家没人的店挂了个牌子“闲人免进”,但你真要进去还是有各种办法可以办到。所以private,以及所有其他的access modifier都有一层隐含的含义:如果你按照遵守这套规则,开发者可以保证不出问题(不考虑bug的情况下);否则,后果自负。

package PrivateTest;

public class PrivateCar {
    
    //private成员变量:在传统的类实例调用方式,只能在本类中访问
    private String color="黄色";
    
    //protected方法:使用传统的类实例调用方式,只能在子类和本包中访问
    protected void drive() {
        System.out.println("this is private car! the color is:" + color);
    }
    public static void main(String[] args) throws Throwable {
        PrivateCar pcar = new PrivateCar();
        pcar.drive();
    }
}

//返回结果:(this is private car! the color is:黄色)
package PrivateTest;

import java.lang.reflect.Field;

public class PrivateCarReflect {
    public static void main(String[] args) throws Throwable {
        Class clazz = PrivateCar.class;
        PrivateCar pcar = (PrivateCar) clazz.newInstance();

        Field colorFld = clazz.getDeclaredField("color");
        //取消java语言访问检查以访问private变量
        colorFld.setAccessible(true);
        colorFld.set(pcar, "红色");
        pcar.drive();
    }
}

//返回结果:(this is private car! the color is:红色)

相关文章

网友评论

      本文标题:private变量修饰符

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