本帖最后由 Zjy_yahoo 于 2016-7-30 21:39 编辑
这次的简单一些,感觉核心的就是老师上课讲的,程序内部执行的时候是不看static type的,直接dynamic type,说白了其实就是这个reference本身存储的对象是什么,它调用一个override函数时采用的就是哪个。
我对此的理解目前来讲是,在调用那个函数时传递进去的this指针就是这个对象的本身,在这个例子中就是LockDList
这样即使LockDList的对象执行非重写的函数时,里面的newNode调用实际上是this.newNode,所以调用的是LockDList的版本。
为验证,我在Dlist的某个未被重写的函数(如isEmpty)内加入了如下代码:
if(this instanceof LockDList){ System.out.println("Bingo! 'this' pointer is the subclass! "); } 用Test文件得到的输出如下:
另外我想说的就是我也把insertBefore和insertAfter这两个函数进行了重写,我个人感觉应该判断node是否是LockDListNode 然后再决定是否执行添加的操作。 public void insertBefore(Object item, DListNode node) { if(node instanceof LockDListNode){ super.insertBefore(item, node); } }
|