class Parent
{
 void method1()
        //private void method1()//在这个地方把该方法变为private会导致结果变化
         {
System.out.println("Parent's method1()");
} public void method2(){
System.out.println("Parent's method2()");
this.method1();
}
}class Child extends Parent{
 void method1(){
System.out.println("Child's mehtod1()");
} public static void main(String args[])
{
Parent p=new Child();
p.method2();
}
}在父类的method1方法默认为包属性时,结果为
Parent's method2()
Child's mehtod1()
我们可以解释这是因为多态
但是当我把父类的method1方法变为私有权限时,结果变为
Parent's method2()
Parent's method1()
请问怎么解释?
另外,我把这个程序用C++也写了一遍,但是无论父类的这个虚函数method1为private或者public都是同一个结果,也就是第一种
Parent's method2()
Child's mehtod1()请高手指点迷津,不甚感谢

解决方案 »

  1.   

    1在父类的method1方法默认为包属性时.
    这个是因为父类的method1()被覆盖了.
    2把父类的method1方法变为私有权限时
     子类里面的method1()方法并没有覆盖父类的方法,相当于生成了一个新的方法!
      

  2.   

    那你的意思是说私有方法是不允许override的?
      

  3.   

    我已经在ThinkingP178上找到答案了,谢谢