以下程序中this实际上代表子类对象是吧?为什么调用print时还是调用了父类呢?请给出有力的说明谢谢了
class Base
 {
 
  private void print()
  {
  System.out.println("父类方法被调用");
  }
  public void show()
  {
  this.print();
  System.out.println(this.getClass().getName());      
  }
 }
 
 class Sub extends Base
 {
  void print()
  {
  System.out.println("子类方法被调用");
  }
 }
 
 public class InheritanceDemo
 {
  public static void main(String[] args)
  {
  Sub s =new Sub();
  s.show();
 
  }
 }

解决方案 »

  1.   

    Base中的print()是private的,private方法是不可以override的,因此是调用Base的print()而不是Sub的print().
      

  2.   

     this代表当前对象,你调用的是父类 代表的就是父类的方法
      

  3.   

    你说错了吧,这个this代表队是子类,我后面那段代码说明他代表的是子类对象了,他只是编译类型是父类
      

  4.   

    你们说这个this对象是不是发生了向上转型啊
      

  5.   

    父类print方法是private 私有方法不能被重写.
      

  6.   

    你将那个private void print() 的private去掉试试
      

  7.   

    this指自己所在的对象。
    比如在一个方法中,调用其他对象的变量或方法时,可以使用那个对象的对象名,比如aa.abc();
    而调用自己所在对象的方法或变量时,不知道别人给起了什么名,所以直接用this.abc()就可以了
    你所表达的就是这个this 在子类继承的时候代表的是谁 , 你可以把父类的方法名改一下试试,
    你说的是方法的重写 他会打印调用子类方法  那只是方法被子类重写了而已  
      

  8.   

    因为父类中的void print() 被声明为private的在子类中不能被重写,把它去掉就行了!
      

  9.   

    其实很简单,你把父类方法中的private 关键字加上后, 输出的是 父类的方法被调用;
    你把private 关键字去掉后,输出的是 子类的方法被调用,加上private关键字后,父类的方法不能被子类所继承,this关键字调用的是父类的方法,但是没有修饰符private,调用的是子类的方法,这个时候子类可以继承父类的方法,子类重写了父类的方法;this是对当前子类对象的调用。
      

  10.   

     纠正一下!!! 只要是继承关系 子类继承父类的一切 , 只是子类无法访问父类的私有属性 或 方法 
    所以 你用this关键字调用继承父类的私有 属性 或方法 点不出来  而并不代表子类没有继承父类的私有的东西
      

  11.   

    子类调用父类方法的过程中有没有发生向上转型啊,this编译类型是父类,实际代表的是子类对象的引用。求高手解释一下啊?
      

  12.   

    我测试了一下,在eclipse中,类Father中有一个private的int 类型的属性a = 2,然后被一个私有方法print()调用,输出a的值,这个私有方法又被public方法p()调用一下,然后子类Son继承Father之后就在main方法里边 Son son = new Son();然后调用son.p();通过Debug发现,son的Variables中含有a这个属性,只不过他前边是个红色的方块图标。这能不能代表子类继承了父类的私有属性呢
      

  13.   

    Son类中也能定义int类型的a,好蛋疼
      

  14.   

    不用纠结了,官方说了,子类不继承父类的私有属性,所以不用再讨论了。Private Members in a Superclass
    A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass.http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html在百度Java吧看到的,7楼
    http://tieba.baidu.com/p/1749428259
      

  15.   

    看think in java和weiss写的数据结构的书关于java基础部分,都是写的私有也是继承的,只是不能用。
    看到你的回帖,怎么都琢磨不明白了疯了
    如果该类都不继承私有方法那么内存中存放方法的代码段都没有这个父类方法,怎么调用呢。
      

  16.   

    http://topic.csdn.net/u/20121018/18/6faab391-6e22-42ea-b591-910251dadb9d.html?63004
    我刚写的 关于父类私有方法如何调用
      

  17.   

    我感觉这样说不合适,subclass是继承了 Superclass所有的属性了,包括私有的,只是,只是,subclass 不能访问它而已,继承了是肯定的,不能访问也是肯定的.
      

  18.   

    因为父类的 print 方法是私有的,才会出现这样的情况,
    LZ 可以把私有该成保护或者公有,执行一下就知道了。
      

  19.   

    我关心的是this编译类型和运行时类型不一样
      

  20.   

    sub 类继承了base类 当你的子类不存在方法 就会去调用父类方法 
    走到父类时调用show方法时先调用私有的print方法 因为是父类自己可以调自己的方法 而你输出类的时候this指的是你当前创建实例的这个类 就是sub类
      

  21.   

    这个过程中发生了向上转型?(this)
      

  22.   

    this的作用域是当前类,所以this方法调用的是父类print()方法。
      

  23.   

    不明真相 一下.... 
    我也迷糊了 this不是调用此方法的对象吗
    明明是sub类型执行的show方法 为什么指向了base父类?按照你的解释 this应该永远指向base类
    可是在LZ的例子里 如果把base类里面print方法的private去掉 执行的就是sub类的print方法
    这怎么解释?
      

  24.   

    Base中的print方法为 private 只对它自己可见 Sub中看不到public void show()为public 对所有类可见 class Sub extends Base  sub继承Base  也就继承了show方法void print()
     {
       System.out.println("子类方法被调用");
     }是定义了一个新方法  并不是重写Base中的 print方法 Sub s =new Sub();
     s.show(); 调用了show方法 show方法调用了Base中的print
      

  25.   

    JVM运行机制就这样,没道理讲
      

  26.   

    你从哪看的说this指向子类对象?this明明是指向当前对象
      

  27.   


    +10086顺便贴一下,调用子类print的代码class Base { protected void print() {
    System.out.println("父类方法被调用");
    } public void show() {
    this.print();
    System.out.println(this.getClass().getName());
    }
    }class Sub extends Base {
     protected void print() {
    System.out.println("子类方法被调用");
    }
    }public class InheritanceDemo {
    public static void main(String[] args) {
    Sub s = new Sub();
    s.show(); }
    }