public class Test1 {
private int i=0;

public void print(){
System.out.println(this.i);
}

public Test1(int i){
this.i=i;
System.out.println("Test1.i--------"+this.i);
System.out.println("Test1--------"+this);
}

class Test2 extends Test1{
private int i=444;

public Test2(){
super(9);
System.out.println("super--------:"+super.i);


System.out.println("Test1.this--------:"+Test1.this);

}

public void print(){
System.out.println("this.i--------:"+this.i);
System.out.println("Test1.this--------:"+Test1.this+"--------"+"Test2.this--------:"+this+"    ");
System.out.println("Test1.this.i--------:"+Test1.this.i+"````");//1

}

}
}public class Test {
public static void main(String[] args) {
Test1 t1=new Test1(1);

System.out.println("t1      :"+t1);

Test1.Test2 t2=t1.new Test2();

t2.print();
}
}
注释1处得运行结果为:Test1.this.i--------:1````
这是为什么???
求解,求高手。

解决方案 »

  1.   

    public Test1(int i){
     this.i=i;
     System.out.println("Test1.i--------"+this.i);
     System.out.println("Test1--------"+this);
     }
     你这个方法不就是初始化你那个Test1里面的那个i的值么
    结果你在main里面传了一个1所以它的结果肯定是1啥
      

  2.   

    可是内部类的构造器中的super(9) 怎么解释了???
      

  3.   

    public Test2(){
     super(9);
     System.out.println("super--------:"+super.i);
     System.out.println("Test1.this--------:"+Test1.this); }
    哥们你的super(9)代表父类,不可能父类还继承子类的东西吧
      

  4.   

    当在子类的构造函数需要调用父类的构造函数时,实用super(),调用,当然super(),里面可以加形参(根据具体的父类的构造函数是否需要形参),这条语句必须写在子类构造函数的第一句
      

  5.   

    哥们,我在soso上给你找了个让你理解this和super的应该不错
    this :  1.指当前对象.         2.如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名。       3.调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)super: 1.调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。        2.它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时)。举例:   class  父亲 {              int i =1;              public 父亲(){                  System.out.println("我是父亲!");              }              public void nb() {                     System.out.println("我是父亲的方法!");             }          }class 儿子 extends 父亲 {         int i =3 ; //  父类中的 i  ,被 子类的 i 引藏了, 要怎样得到父类的 i 呢?         public 儿子() {          super();  //    调用父类的构造 ,输出啥???      System.out.println("我没参数哦");         System.out.println("父类的 i 是 " + super.i); // super.i 调用父类 i        }       public 儿子(int i) {         this(); //     调用 子类上面的 无参数的 构造       System.out.println("我是宝宝!")           this.i = i ;  //    "="号右面的 i  是您传近来的 值 , this.i  表示当前子类的i ,"3";              }         public void nb() {     super.nb(); //调用父类的 nb方法. 输出啥???    System.out.println("子类方法");    System.out.println(i + " i  等于您传近来的值了")    }   public static void main(String[] args) {       new 儿子(10000)  //您看看子类bn方法 输出的 i 是 3 还是 10000;  }}
      

  6.   

    Test1.this 有具体代表什么了?? 还有,为什么我调试的时候,Test1.this.i 显示的是9?
      

  7.   

    System.out.println("Test1.this.i--------:"+Test1.this.i+"````");//1
    内部类使用this的时候是内部类自己本身的实例对象,那么内部类如何使用外部类的this呢?就是通过外部类.this的方式来访问外部类的this
    Test1 t1=new Test1(1); //Test1类中的方法的this就是指t1,所以t1.i = 1System.out.println("t1 :"+t1);Test1.Test2 t2=t1.new Test2(); //Test2类中的this只的是内部类实例本身,也就是t2,那么t2的外部类实例的this是什么?就是t1,因为是t1.new来创建t2的t2.print(); //所以这里的打印调用
    System.out.println("Test1.this.i--------:"+Test1.this.i+"````");//1
    的Test1.this就是指t2的外部类实例对象t1,所以t1.i就是1
      

  8.   


    public Test2(){
     super(9);
     System.out.println("super--------:"+super.i);
     System.out.println("Test1.this--------:"+Test1.this);
     System.out.println("Test1.this.i--------:" + Test1.this.i); //这行显示的是1,然后你在参考下上面的回答
    }父类是父类,外围类是外围类,只不过你这内部类的父类刚好是外围类,容易混淆
      

  9.   


    说的简单一点就是 Test1方法中的的this就是Test2方法中的Test1.this
    即外部类的实例对象自己本身
    Test2方法中的this就是Test2实例对象自己本身
    LZ要清楚内部和外部的关系。