基类:package com.cn;import com.dai.C;public class A {
public void b() {
System.out.println("A.b");
}
    protected void c() {
System.out.println("A.c");
}
    private void d() {
     System.out.println("A.d");
    }
    public static void main(String[] args) {
     A c = new C();
c.d();//打印出A.d了呵呵??
}
}
/*
 * private类型的能继承吗?呵呵
 * 
 * */
派生类:package com.cn;import java.lang.reflect.Method;public class C extends A{
public static void main(String[] args) {
A c = new C();
Class<? extends A> type = c.getClass();
Method[] methods = type.getMethods();
for(Method me:methods) {
System.out.println(me.getName());
}
}
}
/*
最后的输出为:
main
b
wait
wait
wait
equals
toString
hashCode
getClass
notify
notifyAll
为什么没有c呢?
*/不是继承了c()这个方法了吗?为什么没有打印出C。java继承到底是什么样的机制啊。
多态的时候有事咋回事呢?
谁能说说继承多态的内存模型呢?

解决方案 »

  1.   

     第二个问题是getMethods();只得到public方法。第一个还是很疑惑啊?有没有人提点意见呢?
      

  2.   

    getMethods() 
              返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。API上就写了,这个方法返回的就是 公共 的方法
    你能在外部调用的,只有公用方法,
    把 protected 的方法通过反射返回给你也没有意义
    protected 的方法可以继承,就是在其子类的内部可以调用
    private 类型不能继承
      

  3.   

    private类型的不能继承,
    是根本没继承、
    还是继承了一块儿内存但是不可用
    我给忘了记得java编程思想上有吧
      

  4.   

    那么private方法是不能继承的,但是为什么通过多态确实可以使用呢?就像上面A中的方法d(),有没有上面好的解释呢?
      

  5.   

    坐等高手讲解,C方法是protected,现在是同包的子类。我也觉得可以访问?为啥呢?
      

  6.   

    不能继承的意思说的是在其子类内部不可调用通过多态可以使用?你哪里通过多态使用了?A c = new C();
    c.d();你把这段移到别的类里面试试……,
    你这个调用d()的方法,还是在A类的内部,在内部用A类型的引用调用A类的私有方法当然可以或者你改成
    C c = new C();
    c.d();
    试试……
      

  7.   


    是可以访问的,只是个getMethods()只返回public方法的,所以,,,
      

  8.   

    嗯,说的很有道理啊,是不是可以这样理解:我这里的方法c.d();与直接d();这两个是同一个意思呢?当然前提是要忽略static问题。也就是说这里的方法调用与new C()是没什么关系的?
      

  9.   

    private 修饰的没有多态,只是调用。
    其实是调用了A类中的方法罢了。
      

  10.   


    1、这样理解有一些小问题:
    你确实生成了一个A的对象,
    但是这个A的对象是在A类的内部生成的
    所以可以通过A的引用调用其私有方法2、如果说执行效果的话,
    你不new C();
    直接调用的d();
    (当然,要在非静态方法中直接调用d();)
    和你这样写的执行效果是一样的。