回 帖 发 新 帖 刷新版面

主题:高手请进!!!!

class  Depend  
{
       int i=10;
      public Depend()
      { 
          print();
          i=20;
      } 
       void  print()
       {
          System.out.println("Depend=>"+i);
       }  

public class Target extends Depend  
{
    int i=30 ;
   public Target()  
   {
       print();
       super.print();
      i=40 ;
   } 
    void print()
     {
          System.out.println( "Target=>"+i);
     } 
     public static void main(String[] args)
     {
      Target target=new Target();
      System.out.println(target.i);
     } 
}

输出结果是
Target=>0
Target=>30
Depend=>20
40
谁能解释下

回复列表 (共1个回复)

沙发

因为Target extends Depend ,所以,在newDepend前首先构造Depend,因此首先进入Depend的构造方法,当执行到print()时,因为Target类也有print()方法,所以子类覆盖了父类的方法,执行Target的print(),由于Target还没新建,所以i还没有值,系统会自动化i的值为0,所以输出了第一行:Target=>0
。执行完Depend的构造方法后,开始进入Target的构造方法,然后执行,此时,Target里的i已经初始化了,i=30。所以,在Target的构造方法里执行print()方法,输出了第二行:Target=>30
执行完print()方法后,开始执行super.print();,所以,输出第三行Depend=>20,后面的输出应该不用解释了吧。

我来回复

您尚未登录,请登录后再回复。点此登录或注册