首先给出结论,私有成员会被继承,但不能被显式调用,构造函数不会被继承。这个问题是我这几天在某网站上面刷题遇到的,感觉比较有意思。我们来验证一下。怎么验证呢,通过反射!
直接创建两个类,父类A,子类B:
class A {
private void prA() {
System.out.println("父类私有");
}
}
class B extends A {
}
然后测试下:
public static void main(String[] args) throws ClassNotFoundException, InvocationTargetException, IllegalAccessException { //由子类得到父类的方法数组 Class bClass = Class.forName("B"); Method[] aMethods = bClass.getSuperclass().getDeclaredMethods(); //设置私有方法可以被访问 AccessibleObject.setAccessible(aMethods,true); for (int i = 0; i < aMethods.length; i++) { aMethods[i].invoke(new B(), null); } Class aClass = bClass.getSuperclass(); }
结果:父类私有
最后引用下官方的一句话关于构造函数的:
原文:https://www.cnblogs.com/junalncer/p/11031869.html