大家好:
   我今天看到一个有关继承和重写的情况里,有个例子挺有意思的!我也挺纳闷的?我在此贴出来,望大家指点迷津,共同学习进步!public class Target extends Depend 
{
int i = 30; public Target() {

print();
i = 40;
}
void print() {

System.out.println(" Target=>  " + i);
} public static void main(String[] args) {
Target s=new Target();
System.out.println(">>>" +s.i);
}
}class Depend {
int i = 10; public Depend() {

print();
i = 20;
} void print() {

System.out.println(" Depend=>  " + i);
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【coment2008】截止到2008-06-25 02:43:43的历史汇总数据(不包括此帖):
    发帖数:9                  发帖分:360                
    结贴数:9                  结贴分:360                
    未结数:0                  未结分:0                  
    结贴率:100.00%            结分率:100.00%            
    敬礼!
      

  2.   

    这个例子很典型,关键就在那个 print() 会根据类的实际情况,调用子类的方法。
    OVER
      

  3.   

    Thingking in Java 3th 中有提及原話是:在构造器中调用多态方法,可能会多态性的吊用到子类的尚未初试化的方法或变量.像以上这种情况,如果那个变量是primitive的还算好,系统会自动清0
    但如果是个reference的话,就要出NullPointerException了
      

  4.   

     Target=>  0
     Target=>  30
     >>>40应该是这个输出结果,原因是实例化父类时print() 方法被子类重写所以读的是子类的print() ,这时子类还没有实例化所以i还是0。
    再实例化子类时当然会输出 Target=>  30,如果这里加上super就不一样了。
    最后执行System.out.println(">>>" +s.i); 
    显示  >>>40
      

  5.   

    共同进步Ing........................