黑马程序员技术交流社区
标题:
有点看不明白求解
[打印本页]
作者:
Zhang_qian
时间:
2012-5-9 19:06
标题:
有点看不明白求解
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());
}
}
}
作者:
Zhang_qian
时间:
2012-5-9 19:20
link=new LinkedList();这里是不是用到了多态啊?link前面是不是省略了this.是不是代表当前的构造函数引用了link?
作者:
李啸
时间:
2012-5-9 19:22
link=new LinkedList();//在DuiLie的构造函数里link是谁的对象?如果是LinkedList的为什么不可以写成这样 LinkedList link=new LinkedList();呢?求指点
这样写的目的是为了节省资源 当去实例化DuiLie对象时才真正的获取了一个LinkedList
作者:
李啸
时间:
2012-5-9 19:26
Zhang_qian 发表于 2012-5-9 19:20
link=new LinkedList();这里是不是用到了多态啊?link前面是不是省略了this.是不是代表当前的构造函数引用 ...
首先没用到多态 link前面确实省略了this关键字当前的构造函数是去给全局的私有的link 赋值
作者:
李啸
时间:
2012-5-9 19:34
建议你去再看一看面向对象
作者:
永恒之翼网络
时间:
2012-5-10 15:08
“ 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();”放在成员变量的位置,不写构造函数,那是可以的。至于你要问为什么写此代码的人不这样写,原因是个人习惯,他喜欢那样写。
作者:
付信榕
时间:
2012-5-10 15:39
//在DuiLie的构造函数里link是谁的对象?如果是LinkedList的为什么不可以写成这样 LinkedList link=new LinkedList();呢?求指点
如果在构造函数里写成 =new LinkedList();则link的作用范围只在 构造函数DuiLie()中,后面的几个方法都不能正确引用到link指向new LinkedList()的对象。所以要把LinkedList link 放在外面(全局变量),那么所有的方法都能够正确用到link指向new LinkedList()的对象。这是一种常见的处理这种情况的方法,多总结,多归纳就能掌握。
作者:
永恒之翼网络
时间:
2012-5-12 08:12
对上面的补充。如果从“
private LinkedList link;
DuiLie()
{
link=new LinkedList();//样 LinkedList link=new LinkedList();
}
”来看的话,应该是使用的包装设计模式。如果楼主对包装设计模式不明白可以看看毕老师的视频。
但是从后面的方法来看,调用的都是 link原有方法,并没有对其功能加强。所以本例有点怪。
作者:
杨鹏
时间:
2012-5-12 09:01
从楼主提供的代码,可以看出楼主想利用LinkedList集合的特有方法来模拟队列结构的特点,构造函数中的link申明的类型是LinkedList类型的,把link申明在成员的位置上,是为了让该成员能够作用于整个类,方便对其操作。link是LinkedList类对象的引用,同时也作为DuiLie类对象的一个属性,不直接在成员位置new LinkedList(),把它放到构造函数中,这样就可以到需要的时候再创建,从而就节省空间资源。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2