涉及继承时的构造方法

涉及继承时的构造方法


今天在csdn上看到这个帖子,觉得很有意思就弄到这里来
这个是关于子类、父类的构造方法调用的问题。经过大家的讨论终于看到结果了,而且我今天也更加深入

了解了构造方法。

贴段程序先:

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)   {
       
       System.out.println(new  Target().i);

     }
 
}
 
  class  Depend  {
   
     int  i  =   10 ;
    public  Depend()  {
       
        print();
        i  =   20 ;
    }
     void  print()  {

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

运行结果是:
Target=>  0
Target=>  30
40

Target继承Depend并且重载了print方法。
1、执行时,在调用Target的构造方法之前隐性调用Depend类的无参数构造方法;
2、Depend的构造方法中调用print方法,Target重载了print方法所以此时调用的是Target内的print方法


3、i为什么会是0?在调用构造方法的时候int变量都被都被初始化为0,所以输出为Target=〉0;
4、Target的构造方法在调用print方法前将i的值赋值为30,调用print方法时输出Target=>  30;


如果将int  i  =   30 ;注销掉后Target内调用的都是Depend内的i(上面的使用的i的值是Target自己的


此时输出结果为
Target=>  10
Target=>  20
40

Target=>  10:Depend构造方法内调用的print方法是Target内重载的,i此时已经被赋值为10,之后i被赋

值为20,Target的构造方法在调用print方法时取i = 2,Target=>  20

你可能感兴趣的:(涉及继承时的构造方法)