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

关于super和this
public Sender(Container c, Writer out) { 
  super(c);
  this.out = out; 
  }
这里括号里两句话有什么用呢?
这个函数有什么用呢?
一直不明白,很多函数好像都有这两句话。
有高手能说明一下吗?


------解决方案--------------------
super(c); 父类构造
this.out 指当前字段有个out,防止重名添加this;不能out=out;
这个函数是赋值
------解决方案--------------------
楼上正解
http://www.10zhizui.cn
------解决方案--------------------
this.out还不是很明白
------解决方案--------------------
1楼的不错
------解决方案--------------------
this.out的this可加可不加,编译器会替你处理好。
你的这个函数是构造的作用,就是初始化本类、为本类成员赋上值。
------解决方案--------------------
this.out 表示该类中有一个类变量out
------解决方案--------------------
理解这个问题,需要首先搞清楚什么是this,this是一个引用,谁的引用呢,一个实例本身的引用;
用this可以去访问类中的方法,成员变量等
比如,

public class Example
{
private int x;
private int y;

public Example(x,y)
{
this.x = x // 给类中的private变量赋值
this.y = y

}
}

你说的this.out,其中的out必定是这个this指向类的一个成员变量,建议看看Sender这个方法所在的类
------解决方案--------------------
mark
------解决方案--------------------
this代表当前对象,你的当前类中有一个属性叫做out,前面用this.out就是把外面传进来的那个out赋给你这个类中的属性out
super()是调用父类的构造方法用的,也可以用super.属性名来调用父类中的属性
------解决方案--------------------
this实在理解不了,就按照英文意思李家好了。“这个”

this.out=out如果用中文翻译,可以译为“这个类的out=out”

this其实就是“谁调用这个方法,this就是谁的对象实例”

比如楼主的例子
public Sender(Container c, Writer out) {
super(c);
this.out = out;


this是被Sender这个方法调用的,那么this值得就是Sender这个方法所在的类这个对象。假设楼主这个类的完整形式这这样:


class TestSender()
{
private Writer out;
private Container c;

public Sender(Container c, Writer out) {
super(c);
this.out = out;

}

那么这里的this可以理解为 new TestSender().那么this.out就相当于 new TestSender().out = out;

后面那个out好理解,就是传近方法的那个形参。
不知道说清楚来了没……呵呵
------解决方案--------------------
super(c) 调用父类的构造方法
this.out = out 把传入参数out赋值给属性out

这个是构造方法,作用是用来创建对象的
------解决方案--------------------
5楼说法不准确,super()大家都说得不错
this则表示对象自身,
this.out则表示自身对象的out属性
至于“可加可不加”,则是在这个方法局部没有和属性重名的时候;如果有重名,则一定要加上this以明确表示对象属性,不加this表示那个重名的变量。
------解决方案--------------------

如果把你的代码改成这样也可以
 public Sender(Container c, Writer x) {
super(c); 
out = x;


如果用X倒是没什么问题 就是看着不舒服~
如果用

out=out;
那岂不是重名了
所以就用了

this.out(这个this就告诉编译器我说的这个out 是上面的out 不是这个out) =out;
------解决方案--------------------
this.out的this可加可不加,编译器会替你处理好。