专业回答
JAVA中,子类可以继承父类的私有属性和方法,但一般不能直接访问,但通过反射还是可以访问的:
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class A extends B{
public void set(int x) throws Exception{
Field i=((Class<? extends A>) this.getClass().getGenericSuperclass()).getDeclaredField("i");
i.setAccessible(true);
i.set(this, x);
}
public Object get() throws Exception{
Field i=((Class<? extends A>) this.getClass().getGenericSuperclass()).getDeclaredField("i");
i.setAccessible(true);
return i.get(this);
}
public static void main(String[] args) throws Exception{
A a=new A();
System.out.println(a.get());
a.set(777);
System.out.println(a.get());
}
}
public class B {
private int i=100;
}
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class A extends B{
public void set(int x) throws Exception{
Field i=((Class<? extends A>) this.getClass().getGenericSuperclass()).getDeclaredField("i");
i.setAccessible(true);
i.set(this, x);
}
public Object get() throws Exception{
Field i=((Class<? extends A>) this.getClass().getGenericSuperclass()).getDeclaredField("i");
i.setAccessible(true);
return i.get(this);
}
public static void main(String[] args) throws Exception{
A a=new A();
System.out.println(a.get());
a.set(777);
System.out.println(a.get());
}
}
public class B {
private int i=100;
}