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

解决方案 »

  1.   

    super(c); 父类构造
    this.out 指当前字段有个out,防止重名添加this;不能out=out;
    这个函数是赋值
      

  2.   

    楼上正解
    http://www.10zhizui.cn
      

  3.   

    this.out的this可加可不加,编译器会替你处理好。
    你的这个函数是构造的作用,就是初始化本类、为本类成员赋上值。
      

  4.   

    this.out 表示该类中有一个类变量out
      

  5.   

    this.out 表示该类中有一个类变量out
      

  6.   

    this.out 表示该类中有一个类变量out
      

  7.   

    理解这个问题,需要首先搞清楚什么是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这个方法所在的类
      

  8.   

    this代表当前对象,你的当前类中有一个属性叫做out,前面用this.out就是把外面传进来的那个out赋给你这个类中的属性out
    super()是调用父类的构造方法用的,也可以用super.属性名来调用父类中的属性
      

  9.   

    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好理解,就是传近方法的那个形参。
    不知道说清楚来了没……呵呵
      

  10.   

    class Sender extends Blockable { // send
      private Writer out;
      public Sender(Container c, Writer out) { 
        super(c);
        this.out = out; 
      }
      public void run() {
        while(true) {
          for(char c = 'A'; c <= 'z'; c++) {
             try {
              i++;
              out.write(c);
              state.setText("Sender sent: " 
                + (char)c);
              sleep((int)(3000 * Math.random()));
            } catch (InterruptedException e){}
              catch (IOException e) {}
          }
        }
      }
    }这是完整的代码
      

  11.   

    这样看来, super(c);就是调用Blockable这个父类的构造方法。
    而this.out,如我前面说的,可以理解为  new Sender().out = out;
    因为如果直接用out = out,会混淆不知道哪个个out是类的成员变量,哪个是方法的形参。
    用了this以后,“这个类的out = out”,明白了吗?
      

  12.   

    super(c)             调用父类的构造方法
    this.out = out       把传入参数out赋值给属性out这个是构造方法,作用是用来创建对象的
      

  13.   

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

  14.   

       
    如果把你的代码改成这样也可以
     public   Sender(Container   c,   Writer   x)   {   
            super(c); 
            out   =   x;   
        } 如果用X倒是没什么问题 就是看着不舒服~
    如果用out=out;
    那岂不是重名了
    所以就用了this.out(这个this就告诉编译器我说的这个out 是上面的out 不是这个out)          =out;
      

  15.   

    this.out的this可加可不加,编译器会替你处理好。