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
这个Target=>0和Depend=>20应该怎么解释的,哪位大侠帮忙详细解释下

解决方案 »

  1.   

    1.
    构造子类的时候先构造父类
    其中动态绑定了子类的覆盖方法print(此时为轮到子类属性初始化 默认为0)2.
    父类构造好后 轮到子类构造 先属性后构造方法 所以等print时 i已为30
      

  2.   

    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);
    }
    }