关于this和应用传递的实例的疑问

xzyr2046 2010-02-20 10:10:13
class Outer{
private String info="hello world!";
public void fun(){
new Inner(this).print();
}
public String getInfo(){
return this.info;
}
}
class Inner{
private Outer out=null;
public Inner(Outer out){
this.out=out;
}
public void print(){
System.out.println(this.out.getInfo());
}
}
public class JavaDemo03{
public static void main(String args[]){
new Outer().fun();
}
}

new Outer().fun()调用Outer类中的fun()方法,再从new Inner(this)实例化调用Inner类中的print()方法,而在Inner类

中为了能访问Outer类中被封装的info属性,必须实例化Outer对象。各位觉得我分析的对吗?

但是当前对象new Outer()是怎么传递进去的呢?先传到new Inner(this)中,再传到this.out中。总觉得new Inner(this)

代码无法理解,还有不能用this.getInfo(),传入的不是new Outer()吗?this.out=out中的this具体是指什么呢?各位高手

相助啊,谢谢啊O(∩_∩)O~
...全文
124 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
darxin 2010-02-21
  • 打赏
  • 举报
回复
楼主提供的代码,其本质为

class Outer{
private String info="hello world!";

public String getInfo(){
Outer outer = this;
return outer.info;
}
}
public class JavaDemo03{
public static void main(String args[]){
Outer outer = new Outer();
System.out.println(outer.getInfo());
}
}


首先可以将Outer对象作为另一个代理对象(类型为Inner)的成员变量,通过调用Inner对象的方法(print)来间接调用Outer对象的方法(getInfo)。如:

class Outer{
private String info="hello world!";

public String getInfo(){
Outer outer = this;
return outer.info;
}
}
class Inner{
private Outer out=null;

public Inner(Outer out){
// 这里没有创建新的Outer对象
Inner inner = this;
inner.out=out;
}

public void print(){
Inner inner = this;
Outer outer = inner.out;
System.out.println(outer.getInfo());
}
}
public class JavaDemo03{
public static void main(String args[]){
// Outer对象只在这里被创建了一次
Outer outer = new Outer();
Inner inner = new Inner(outer);
inner.print();
}
}


但是楼主还闲不够烦,又要由Outer对象负责Inner对象的创建过程。如:

class Outer{
private String info="hello world!";

public String getInfo(){
Outer outer = this;
return outer.info;
}

public void fun(){
Outer outer = this;
Inner inner = new Inner(outer);
inner.print();
}
}
class Inner{
private Outer out=null;

public Inner(Outer out){
// 这里没有创建新的Outer对象
Inner inner = this;
inner.out=out;
}

public void print(){
Inner inner = this;
Outer outer = inner.out;
System.out.println(outer.getInfo());
}
}
public class JavaDemo03{
public static void main(String args[]){
// Outer对象只在这里被创建了一次
Outer outer = new Outer();
outer.fun();
}
}


事实上,楼主在这里要掌握的是this关键字的用法,关于这一点,可以看一看Java的基本语法书,也可以看一看ZangXT对this的描述
LuffySY 2010-02-21
  • 打赏
  • 举报
回复
1,通过new Inner(this).print() 传进去 这里的this是Outer对象
2,因为this是Inner对象 所以没法用this.getInfo() 必须用this.out.getInfo()
3,this.out=out this是Inner对象
xzyr2046 2010-02-20
  • 打赏
  • 举报
回复
哪位大侠能帮帮小弟啊,谢谢啊!!!!!
xzyr2046 2010-02-20
  • 打赏
  • 举报
回复
帅哥,你解释的,我还不是很明白,new Inner(this).print();这段代码的this是Outer的实例呗,为什

么可以这么用啊?new Outer()的传递过程过程还是不很明白啊,能否详细解释下?谢谢啊
soulx 2010-02-20
  • 打赏
  • 举报
回复
在fun()方法中,你把Outer的实例注入到Inner中有一个私有对象实例Outer out,这样在Inner中你就可以用out调用Outer的方法。

this.out=out;
this指的是当前对象也就是Inner的实例。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧