日期:2014-05-20  浏览次数:20702 次

请教一个关于this的问题
class A
{
private B b = null;
public void fun()
{
this.b = new B(this);
this.b.fun();
}
public void print()
{
System.out.println("Hello World!!!");
}
}
class B
{
private A a = null;
public B(A a)
{
this.a = a;
}
public void fun()
{
this.a.print();
}
}

public class ThisDemo07
{
public static void main(String[] args)
{
new A().fun();
}
}
请教下这个结果最后为什么输出helloworld

------解决方案--------------------
我试下来解答吧!

class A的private B b = null 和 class B的 private A a =null;
这里创建了
B的一个对象 和 A的一个对象
权限是private,也就是说只有本类可以访问。

类A中

public void fun()
{
this.b = new B(this);
this.b.fun();
}

这里this.b中的this指向的是类A中的b(private B b = null)
后面B(this)中this为本类中的对象(this=A a),这跟类B中B的构造函数中的参数一致

public void print(){System.out.println("Hello World!!!");}
这个是类A的方法


类B中

public B(A a){this.a = a;}
类B的构造函数,参数为(A a),函数里的this指向类B中的私有对象a(private A a=null)

public void fun(){this.a.print();}
这里是类B的方法,this.a.print中的this.a指向本类中的私有对象a,最后执行方法print() ( 类A中的方法print() )


Public类中

new A().fun();

这里new A(),首先生成A的对象,因为A没有重写构造函数,所以生成默认的对象A()
然后这个对象执行方法fun()
在A类的方法fun()里,有this指向的B类的方法this.b.fun()---->this.a.print();
也就是
System.out.println("Hello World!!!");

所以最后输出Hello World!!!