日期:2014-05-20  浏览次数:20799 次

求!!!帮忙进来看下
package   a;

public   class   A   {

/**
  *   @param   args
  */
A(int   x){

System.out.println( "进入a的构造函数 ");
run();

}

public   void   run(){

System.out.println( "运行a:run ");

}

}

package   a;

public   class   B   extends   A   {

/**
  *   @param   args
  */
B(int   x,   int   y){

super(0);

}

public   void   run(){

System.out.println( "运行b:run ");

}

}

package   a;

public   class   C   {

/**
  *   @param   args
  */
public   static   void   main(String[]   args)   {
//   TODO   Auto-generated   method   stub
int   i   =   0;
int   j   =   0;
B   object_B   =   new   B(i,j);
}

}

第一次结果:

调用父类构造函数
运行b.run
结束子类构造函数
------------------------
package   a;

public   class   A   {

/**
  *   @param   args
  */
A(int   x){

System.out.println( "进入a的构造函数 ");
run();

}

public   void   run(){

System.out.println( "运行a.run ");

}

}

package   a;

public   class   B   extends   A   {

/**
  *   @param   args
  */
B(int   x,   int   y){

super(0);

}

private   void   run(){   //   此处为私有的与上边唯一的书写差别,当此处run方法被注释掉会报错

System.out.println( "运行b.run ");

}

}

package   a;

public   class   C   {

/**
  *   @param   args
  */
public   static   void   main(String[]   args)   {
//   TODO   Auto-generated   method   stub
int   i   =   0;
int   j   =   0;
B   object_B   =   new   B(i,j);
}

}
第二次结果:

调用父类构造函数
运行a.run
结束子类构造函数
----------------------
我想问一下上边和下边的运行上的差别,为什么在父类调用相同的名字时,第一次是调用子类的方法,第二次确是父类的,不要回答因为第二次是私有的不能被子类继承,这我知道,我是要原理上解释。我想知道当子类对象实例化时所调用的父类对象是以什么样的形式、顺序,我的理解是子类调用父类构造函数时所调用的方法应该是父类的,但结果却调用了子类重写的方法...这到底是为什么????
我想知道的是为什么调用重写的方法,我知道是方法重写,我不想知道这样的答案,我想知道他的实际运行原理。。比如:子类对象实例化时调用父类构造方法-〉执行父类构造方法的代码-〉System.out.println( "进入a的构造函数 ");-〉run();。。。关键现在到这了,程序走到这里现在是在父类的构造方法里,他怎么知道这个run方法被子类重写了???还有既然第一次能调用子类的run方法,那么我把父类的run注释掉应该还会调用子类的run,但我想错了,会报错,我是想知道这背后的东西。。
-----------------------------


------解决方案--------------------
太忙了,没有时间帮你看,顶
------解决方案--------------------
楼主注意简明扼要...

详细地我看你还是去Java Language Specification或者Thinking in Java看看吧
------解决方案--------------------
看看书吧,《java参考大全》《thinking in java》都不错!
------解决方案--------------------
JAVA的OOP思想讲的就是这方面的,建议你多看看,就能体会了!