對於類A、B,A是B的基類,A有一個私有成員name
A.java
public class A { private String name = "A"; public void print() { System.out.println(name); } }
B.java
public class B extends A { }
對於A對象a,要想改變a的name,可以這樣操作:
try { Field nameFieldInA = a.getClass().getDeclaredField("name"); nameFieldInA.setAccessible(true); nameFieldInA.set(a, "一"); a.print(); } catch (NoSuchFieldException | IllegalAccessException ex) { ex.printStackTrace(); }
要訪問a的name,可執行nameFieldInA.get(a)
對於B對象b,要改變b的name,可以這樣:
import java.lang.reflect.Field; public class Main { public static void main(String[] args) { try { B b = new B(); b.print(); Field field = b.getClass().getSuperclass().getDeclaredField("name"); field.setAccessible(true); field.set(b, "B"); b.print(); } catch (NoSuchFieldException | IllegalAccessException ex) { ex.printStackTrace(); } } }
