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````
这是为什么???
求解,求高手。
this.i=i;
System.out.println("Test1.i--------"+this.i);
System.out.println("Test1--------"+this);
}
你这个方法不就是初始化你那个Test1里面的那个i的值么
结果你在main里面传了一个1所以它的结果肯定是1啥
super(9);
System.out.println("super--------:"+super.i);
System.out.println("Test1.this--------:"+Test1.this); }
哥们你的super(9)代表父类,不可能父类还继承子类的东西吧
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; }}
内部类使用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
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,然后你在参考下上面的回答
}父类是父类,外围类是外围类,只不过你这内部类的父类刚好是外围类,容易混淆
说的简单一点就是 Test1方法中的的this就是Test2方法中的Test1.this
即外部类的实例对象自己本身
Test2方法中的this就是Test2实例对象自己本身
LZ要清楚内部和外部的关系。