A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Zhang_qian 中级黑马   /  2012-5-9 19:06  /  1987 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;
class DuiLie
{
        private  LinkedList link;

        DuiLie()
        {
         link=new LinkedList();//在DuiLie的构造函数里link是谁的对象?如果是LinkedList的为什么不可以写成这样 LinkedList link=new LinkedList();呢?求指点
        }
        public  void myAdd(Object obj)
        {
               
                link.addFirst(obj);
        }
        public  Object myGet()
        {
               
                return link.removeLast();
        }
        public boolean isNull()
        {
               
                return link.isEmpty();
        }
}



class LinkedListTest
{
        public static void main(String[] args)
        {
                DuiLie dl=new DuiLie();
                dl.myAdd("a");
                dl.myAdd("b");
                dl.myAdd("c");
                dl.myAdd("d");
                while(!dl.isNull())
                {
                        System.out.println(dl.myGet());
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1

查看全部评分

8 个回复

倒序浏览
link=new LinkedList();这里是不是用到了多态啊?link前面是不是省略了this.是不是代表当前的构造函数引用了link?
回复 使用道具 举报
link=new LinkedList();//在DuiLie的构造函数里link是谁的对象?如果是LinkedList的为什么不可以写成这样 LinkedList link=new LinkedList();呢?求指点
这样写的目的是为了节省资源 当去实例化DuiLie对象时才真正的获取了一个LinkedList

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
Zhang_qian 发表于 2012-5-9 19:20
link=new LinkedList();这里是不是用到了多态啊?link前面是不是省略了this.是不是代表当前的构造函数引用 ...

首先没用到多态 link前面确实省略了this关键字当前的构造函数是去给全局的私有的link 赋值

点评

...  发表于 2012-5-10 00:14
回复 使用道具 举报
建议你去再看一看面向对象
回复 使用道具 举报
“ link=new LinkedList();//在DuiLie的构造函数里link是谁的对象?如果是LinkedList的为什么不可以写成这样 LinkedList link=new LinkedList();呢?”是LinedList对象,至于为什么不写成"LinkedList link=new LinkedList();"原因有两个方面。第一个方面是在构造函数DuiLie使用了LinkedList link=new LinkedList();得到的对象并不会赋给成员变量link, 因为构造函数里也有一个变量link,它屏蔽掉了成员变量link,那后面对成员变量link的操作都无意义,就算去掉“ private  LinkedList link;”也没有用,因为构造函数调用完之后,LinkedListd对象会释放。第二个方面是如果把“LinkedList link=new LinkedList();”放在成员变量的位置,那它下面的构造函数就无意义了,就不应该写。如果楼主的意思是把“LinkedList link=new LinkedList();”放在成员变量的位置,不写构造函数,那是可以的。至于你要问为什么写此代码的人不这样写,原因是个人习惯,他喜欢那样写。
回复 使用道具 举报
       //在DuiLie的构造函数里link是谁的对象?如果是LinkedList的为什么不可以写成这样 LinkedList link=new LinkedList();呢?求指点
如果在构造函数里写成 =new LinkedList();则link的作用范围只在 构造函数DuiLie()中,后面的几个方法都不能正确引用到link指向new LinkedList()的对象。所以要把LinkedList link 放在外面(全局变量),那么所有的方法都能够正确用到link指向new LinkedList()的对象。这是一种常见的处理这种情况的方法,多总结,多归纳就能掌握。

      

评分

参与人数 1技术分 +1 收起 理由
刘亚超 + 1

查看全部评分

回复 使用道具 举报
对上面的补充。如果从“
private  LinkedList link;

        DuiLie()
        {
         link=new LinkedList();//样 LinkedList link=new LinkedList();
        }
”来看的话,应该是使用的包装设计模式。如果楼主对包装设计模式不明白可以看看毕老师的视频。
但是从后面的方法来看,调用的都是 link原有方法,并没有对其功能加强。所以本例有点怪。
回复 使用道具 举报
杨鹏 中级黑马 2012-5-12 09:01:36
9#
从楼主提供的代码,可以看出楼主想利用LinkedList集合的特有方法来模拟队列结构的特点,构造函数中的link申明的类型是LinkedList类型的,把link申明在成员的位置上,是为了让该成员能够作用于整个类,方便对其操作。link是LinkedList类对象的引用,同时也作为DuiLie类对象的一个属性,不直接在成员位置new LinkedList(),把它放到构造函数中,这样就可以到需要的时候再创建,从而就节省空间资源。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马