是的,访问修饰符会影响反射。在 Java 中,访问修饰符主要有以下三个级别:
private
:表示私有成员,在类内部,只允许该类内部访问。在继承该类的子类中无法访问,使用反射也不能获取到该私有成员。protected
:表示受保护成员,在同一个包中(例如,同一个类、同一个接口、同一个类中不同的方法等)的类或者其它子类可以访问。使用反射也可以访问受保护成员。public
:表示公共成员,可以被所有类访问。使用反射也可以获取到该公共成员。如果某个属性被声明为公共的,但是子类中声明了该属性为私有,此时在父类中尝试使用反射获取该属性,会导致 java.lang.TargetException异常。这是因为父类试图使用子类中私有属性的时候,需要通过访问修饰符(如 access modifier)来判断属性是否被访问或者实现。如果被声明为 private
级别的属性,则会在访问时抛出异常。
领取专属 10元无门槛券
手把手带您无忧上云