cs61b homework4
作业中没给测试代码,测试代码是从一亩三分地论坛上盗的别人的。
运行结果:
DList:
LockDList:
因为List之前的homework和project中已经实现过好几回了,所以感觉这次作业还比较轻松,没有怎么debug就出来了;
贴一下LockDList的代码好了:
LockDListNode:
package list; public class LockDListNode extends DListNode { boolean isLocked; LockDListNode(Object i, DListNode p, DListNode n) { super(i, p, n); isLocked=false; // TODO Auto-generated constructor stub } }
LockDList:
package list; public class LockDList extends DList { protected LockDListNode newNode(Object item, DListNode prev, DListNode next) { return new LockDListNode(item, prev, next); } public void lockNode(DListNode node) { if(node instanceof LockDListNode) ((LockDListNode)node).isLocked=true; else return; } public LockDListNode prev(DListNode node) { return ((LockDListNode)super.prev(node)); } public LockDListNode next(DListNode node) { return ((LockDListNode)super.next(node)); } public LockDListNode front() { return((LockDListNode)super.front()); } public LockDListNode back() { return ((LockDListNode)super.back()); } public void remove(DListNode node) { if(((LockDListNode)node).isLocked) return; else super.remove(node); } }
注意的是:1:子类overwrite方法只需要名称一致就行,返回的type类型可以变。
2:protected关键字在子类和同一package内均可使用(之前以为仅限定子类)
3:newNode方法很有用,可以避免LockDList中的代码重复
4:补充一点lecture里面讲到的关于Field shadow的问题:
choice of methods dictated by dynamic type.
choice of fields dictated by static type.
不知道咋样翻译准确些,就直接写英文的notes好了。