首页 > 代码库 > cs61b homework4

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
    }

}
View Code

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);
      }
     
}
View Code

 

注意的是: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好了。

 

cs61b homework4