p.method2(); 是调用parents类的method2() 
 
parents的method2()中又调用了method1() 这个method1()是parents中的private   Child中的method1()并不能改变它

解决方案 »

  1.   

    如果parents的method1()改成public 就是选d
      

  2.   

    答案是c对于
    class Parent{
       private void method1(){
         System.out.println("Parent's method1()");
       } 
      public void method2()
      {
        System.out.println("Parent's method2()");
        method1();
      } 
    }
    在被继承时,可被继承的方法public void method2()其实已经是:
      public void method2()
      {
        System.out.println("Parent's method2()");
        System.out.println("Parent's method1()");
      }
      

  3.   

    请楼主看一篇CSDN上以前的文章,名字好像叫“子类型多态”。看完那个后,你会有很大的收获的。
      

  4.   

    大家可以看看林锐写的《高质量程序设计》一书其中说的很明白!
    选d的原因是:
       对于函数重载(overload),究竟是执行父类的函数还是子类的函数是由程序运行期间决定的。在运行期间Parent p = new Child();语句构造了一个Child类的实例,所以,调用p.method2();时一定是到Child类中去找method2()方法,但是在Child类中又没有定义method2()方法,所以只能调用父类Parent类中的method2()方法。打印出来Parent's method2()
       在Parent的method2()方法中又调用了method1()方法,这个是比较让人糊涂的,实际上
      
      public void method2()
      {
        System.out.println("Parent's method2()");
        method1();
      } 在编译的时候会被解释成
      public void method2()
      {
        System.out.println("Parent's method2()");
        this.method1();
      } 
    注意到多了一个this,用于指代当前实例,当前实例就是
    Parent p = new Child();所构造出来的Child的实例,尽管是在Parent类中被调用,他也一定是Child的实例,所以this.method1()调用的就是Child类中的method1()方法了。所以会打印Child's method1() ,答案选d
      

  5.   

    c,这是一种对象的上转型对象的例子
    A是B的父类
    A a=new B();
    有以下几个特点:
    1。a不能操作B新增成员和方法
    2。a可以操作子类继承或者重写的成员和方法
    class Parent{
       private void method1(){
         System.out.println("Parent's method1()");
       } 
      public void method2()
      {
        System.out.println("Parent's method2()");
        method1();//调用父类方法1
      } 
    } class Child extends Parent{
      public void method1(){
        System.out.println("Child's method1()");
      }   public static void main(String args[]){  Parent p = new Child();//搞出一个上转型对象
      p.method2();//子类中没有该方法的重写,呵呵,就是继承了父类的方法,调用父类方法2
      }
    呵呵,楼主结帐^_^
      

  6.   

    偶真的晕了,按照classjava(原始野人)的解释,那么Child中的method1()方法应该是新增的方法。所以没办法调用。但是大家试试看把Parent p = new Child();改写成Child p = new Child();结果为什么还是一样
      

  7.   

    如果这里改以下:
    private void method1(){// change private to public 
         System.out.println("Parent's method1()");
       } 
    then the answer is  D, not C'
    why?
      

  8.   

    What is displayed when the following is executed? class Parent{
       private void method1(){
         System.out.println("Parent's method1()");
       } 
      public void method2()
      {
        System.out.println("Parent's method2()");
        method1();
      } 
    } class Child extends Parent{
      public void method1(){
        System.out.println("Child's method1()");
      }   public static void main(String args[]){  Parent p = new Child();
      p.method2();
      }} Choices:a. Compile time error b. Run time errorc. prints : Parent's method2()          Parent's method1()d. prints : Parent's method2()          Child's method1() 答案是C但是我们把题改一下,
    class Parent{
       private void method1(){
         System.out.println("Parent's method1()");
       } 
      public void method2()
      {
        System.out.println("Parent's method2()");
        method1();
      } 
    } class Child extends Parent{
      public void method1(){
        System.out.println("Child's method1()");
      }   public static void main(String args[]){  Child p = new Child();//改变了这里  p.method2();
      }} 应该选什么? 也是C!我们再改一下:
    class Parent{
       public  void method1(){  //change here
         System.out.println("Parent's method1()");
       } 
      public void method2()
      {
        System.out.println("Parent's method2()");
        method1();
      } 
    } class Child extends Parent{
      public void method1(){
        System.out.println("Child's method1()");
      }   public static void main(String args[]){  Parent p = new Child();
      p.method2();
      }} 这次终于是答案D了,我们再改
    :
    class Parent{
       public  void method1(){  //change here
         System.out.println("Parent's method1()");
       } 
      public void method2()
      {
        System.out.println("Parent's method2()");
        method1();
      } 
    } class Child extends Parent{
      public void method1(){
        System.out.println("Child's method1()");
      }   public static void main(String args[]){  Child p = new Child();//change here
      p.method2();
      }} 也是答案D,我这里是运行过的结果,可是不理解为什么,那个高手跳出来解释一下?参考贴:
    http://community.csdn.net/Expert/topic/3490/3490386.xml?temp=.3488581
      

  9.   

    说明:
    Parent p = new Child();
    和Child p = new Child();应该是一摸一样的
    编译时声明有什么关系,甚至可以
    Object o=new Child();
      

  10.   

    把parent的method1()改成 public 时,child 里面的method1()就把parent的重写了,所以就是d
    但是它是private时 child不能重写里面的method1() 所以是c
      

  11.   

    声明是有关系的,你们也看到了,声明为Parent和Child的结果是不一样的
      

  12.   

    为什么把parent中改成public method1时,会是选项d
    而private method1时,会是c?
      

  13.   

    回luckycat“偶真的晕了,按照classjava(原始野人)的解释,那么Child中的method1()方法应该是新增的方法。所以没办法调用。但是大家试试看把Parent p = new Child();改写成Child p = new Child();结果为什么还是一样”
    这是因为method1()是重写父类的,偶没错^_^
    楼主给分^_^