首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 关于super和this [已结贴,结贴人:java2000_net]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-15 22:35:07 楼主
      public Sender(Container c, Writer out) {
        super(c);
        this.out = out;
      }
    这里括号里两句话有什么用呢?
    这个函数有什么用呢?
    一直不明白,很多函数好像都有这两句话。
    有高手能说明一下吗?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-15 22:59:101楼 得分:2
    super(c); 父类构造
    this.out 指当前字段有个out,防止重名添加this;不能out=out;
    这个函数是赋值
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-15 23:10:462楼 得分:2
    楼上正解
    http://www.10zhizui.cn
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-15 23:22:563楼 得分:2
    this.out还不是很明白
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-15 23:26:524楼 得分:2
    1楼的不错
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • SINCE1978
    • 等级:
    发表于:2007-11-16 12:13:305楼 得分:2
    this.out的this可加可不加,编译器会替你处理好。
    你的这个函数是构造的作用,就是初始化本类、为本类成员赋上值。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-16 12:21:236楼 得分:2
    this.out 表示该类中有一个类变量out
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-16 12:22:297楼 得分:0
    this.out 表示该类中有一个类变量out
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-16 12:22:528楼 得分:0
    this.out 表示该类中有一个类变量out
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-16 13:05:109楼 得分:1
    理解这个问题,需要首先搞清楚什么是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这个方法所在的类
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-16 14:21:0610楼 得分:1
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-16 14:42:2511楼 得分:1
    this代表当前对象,你的当前类中有一个属性叫做out,前面用this.out就是把外面传进来的那个out赋给你这个类中的属性out
    super()是调用父类的构造方法用的,也可以用super.属性名来调用父类中的属性
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • palocc
    • 等级:
    发表于:2007-11-16 14:54:2312楼 得分:1
    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好理解,就是传近方法的那个形参。
    不知道说清楚来了没……呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-16 15:53:4013楼 得分:0
    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) {}
          }
        }
      }
    }

    这是完整的代码
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • palocc
    • 等级:
    发表于:2007-11-16 16:38:4014楼 得分:0
    这样看来, super(c);就是调用Blockable这个父类的构造方法。
    而this.out,如我前面说的,可以理解为  new Sender().out = out;
    因为如果直接用out = out,会混淆不知道哪个个out是类的成员变量,哪个是方法的形参。
    用了this以后,“这个类的out = out”,

    明白了吗?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Mailbomb
    • 等级:
    发表于:2007-11-16 17:13:0915楼 得分:1
    super(c)            调用父类的构造方法
    this.out = out      把传入参数out赋值给属性out

    这个是构造方法,作用是用来创建对象的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-16 22:30:4016楼 得分:1
    5楼说法不准确,super()大家都说得不错
    this则表示对象自身,
    this.out则表示自身对象的out属性
    至于“可加可不加”,则是在这个方法局部没有和属性重名的时候;如果有重名,则一定要加上this以明确表示对象属性,不加this表示那个重名的变量。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-16 22:40:4617楼 得分:1
     
    如果把你的代码改成这样也可以
    public  Sender(Container  c,  Writer  x)  { 
            super(c);
            out  =  x; 
        }

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

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

    this.out(这个this就告诉编译器我说的这个out 是上面的out 不是这个out)          =out;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-17 13:31:0318楼 得分:1
    this.out的this可加可不加,编译器会替你处理好。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-06-18 22:20:0419楼 得分:0
    仿佛明白了,谢谢大家吧。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved