子类一般情况下不能调用父类的私有方法,但到底是继承了而没有访问权限,还是因为根本没有继承,反射调用的时候也只是通过父类调用?
- Java code
public class Test { public static void main(String[] args) { T2 t = new T2(); t.ff(); }}class T1 { private int f() { return 1; }}class T2 extends T1 { public void ff() { try { Class c = Class.forName("T1"); Method[] m = c.getDeclaredMethods(); m[0].setAccessible(true); Object i = m[0].invoke(this, null); //这里调用私有方法时,参数不是父类对象也可以。 System.out.println(i); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }}
------解决方案--------------------
子类 继承 超类的一切,只不过看不到private修饰的内容
------解决方案--------------------
没有继承。
- Java code
Class c = Class.forName("T1"); Method[] m = c.getDeclaredMethods(); m[0].setAccessible(true); Object i = m[0].invoke(this, null); //这里调用私有方法时,参数不是父类对象也可以。 System.out.println(i);
------解决方案--------------------
拜托六楼好看看api文档的用法
getDeclaredMethods返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
再引用<<thinking in java>>127页的一句话:
“当这么做时,会自动得到基类中所有的域和方法。”
楼主这下满意了吧
------解决方案--------------------
子类当然继承了父类的所有私有属性和方法,只是没有访问权限,只能通过方法间接访问,
就像即使是父类自己,在外部也是访问不了自己的私有属性的
------解决方案--------------------
final加在方法上意思是不可覆盖,而不是不可继承。
private方法由于子类无法直接访问到,肯定不可覆盖,所以相当于是private final,如果你自己在private 方法上加了final没有什么意义。
这个问题到后来又扯到什么是“继承”上面了,那姑且认定每个人对"继承"的语义有不同的理解,有一个事实是正确的:
"extends声明了子类拥有基类中所有的域和方法"
楼主想的答案这句话自然也可以给出。
------解决方案--------------------
------解决方案--------------------
是继承了,但是没有权限访问
用反射就不一样了,因为执行了setAccessible(true),就可以访问了
------解决方案--------------------
对啊,是继承,把继承来的私有函数公有化就可以用了.
------解决方案--------------------
Does subclasses inherit private fields?
------解决方案--------------------
按照java认证程序员考试指南上的说法是子类没有继承父类的私有成员。
"When a member is declared private, a subclass can't inherit it."
- <<Sun Certified Programmer for Java 5 Study Guide : SCJP Exam 310-055>> 英文版 第一章第三十页
------解决方案--------------------
不会继承
补充30楼的:
As the JLS states:http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.2