Java构造方法中的多态

来源:互联网 发布:面向对象高级编程 编辑:程序博客网 时间:2024/06/09 21:27
 
  1. public class Qdb extends Depend   
  2. {   
  3.     int i = 30;   
  4.     public Qdb()   
  5.     {   
  6.         print();   
  7.         super.print();   
  8.         i = 40;   
  9.     }   
  10.   
  11.     void print()   
  12.     {   
  13.         System.out.println("Target=> " + i);   
  14.     }   
  15.   
  16.   
  17.     public static void main(String[] args)   
  18.     {   
  19.         new Qdb();   
  20.     }   
  21. }   
  22.   
  23. class Depend   
  24. {   
  25.     int i = 10;   
  26.     public Depend()   
  27.     {   
  28.         print();   
  29.         i = 20;   
  30.     }   
  31.   
  32.     void print()   
  33.     {   
  34.         System.out.println("Depend=> " + i);   
  35.     }   
  36. }  

对于这道题,我的答案是:

Depend=> 10 Target=>30 Depend=>20

可是在运行后我发现答案是:

Target=> 0 Target=> 30 Depend=> 20

        看到答案让我很是费解,按照方法的调用顺序:在调用子类的构造方法之前先调用父类的构造方法,在执行构造方法的语句之前先初始化成员变量。按照这个顺序得到的应该是我预期的答案。

       不过在用debug跟踪后发现在调用父类构造方法里的print()时执行的不是父类的构造方法,而是去执行了子类的构造方法。也就是说在构造方法里也存在着多态性。不过这也只是我的猜测,查了些资料也没有找到答案,姑且先记下来,以后慢慢去了解。

原创粉丝点击