楼主: jaly50
跳转到指定楼层
上一主题 下一主题
收起左侧

Berkeley CS 61B Data Structures(in Java) Homework4 加分+讨论帖

 
🔗
pirateshadow 2016-4-4 15:11:35 | 只看该作者
全局:
实际上就是用父类的variable去指向子类的object
更多图片 小图 大图
组图打开中,请稍候......
回复

使用道具 举报

🔗
caominki 2016-4-6 19:56:50 | 只看该作者
全局:
调试过程中一个小心得:问题:在class的constructor中对实例变量操作,head始终是null(实例变量前加了类型声明,如下:             DListNode head=……;(DListNode 是类型声明)
原因:实例变量(对象)与局部变量(方法)作用范围以及使用优先级未搞清楚。
细究:在类的constructor/method中:head=……; 与 DListNode head=…… 的意义截然不同。第一个表示head类class的实例变量,第二个head虽然名字与实例变量一样,但实质上是位于constructor/method中的一个局部变量!所以以第二种形式对实例变量head赋值,最终并未起作用,head仍然是null!




更多图片 小图 大图
组图打开中,请稍候......
回复

使用道具 举报

🔗
Eloise 2016-4-7 16:00:16 | 只看该作者
全局:
谢谢LZ提供test代码...
觉得front 和 back 函数其实不用重写,只要把TestLockDList 里面相应的部分从LockDlistNode 改成 DListNode 就好了啊。。
而且不是有其他函数同样返回DLisNode么?也没有全都重写啊.. 还是说这两个函数有什么特殊之处?
和LS遇到了同样的head的问题,想了一会才改过来,给LS的分析赞一个..
更多图片 小图 大图
组图打开中,请稍候......
回复

使用道具 举报

🔗
213123418 2016-4-10 20:18:18 | 只看该作者
全局:
怎么没人讨论part2,我怎么感觉part2是最难的。。。。想了半天没想出来。。。
回复

使用道具 举报

🔗
kawayipk 2016-4-14 04:02:51 | 只看该作者
全局:
感谢前面各位同学,看了大家的集体智慧,终于有点入了门的感觉,爱上JAVA了哈哈。




回复

使用道具 举报

🔗
solar12138 2016-4-21 22:01:45 | 只看该作者
全局:
交作业HW4 with eclipse
更多图片 小图 大图
组图打开中,请稍候......

评分

参与人数 1学分 +1 收起 理由
yingy4 + 1 坚持的不错,再接再厉!

查看全部评分

回复

使用道具 举报

🔗
tinyrookie 2016-4-26 00:24:33 | 只看该作者
全局:
本帖最后由 tinyrookie 于 2016-4-26 00:47 编辑

收获非常大的一次作业。part1很快就解决了,但是part3一开始没有搞明白。尽管自己之前对override了解过一点,但是还是不够透彻。借这次实战,加深了印象。总结几点:
1)类型转化:有两个基本知识点,每一个子类都是一个合法的父类,即LockDListNode一定是DListNode,所以把LockDListNode对象赋给DListNode引用是没有问题。反之赋值的话,需要使用casting,即显示类型转化,其中要求DListNode对象是由子类LockDListNode构造函数构造的。具体可以参考Java in a nutshell的subclasses & Inheritance一章。
2)关于override, 在Java in a nutshell里面定义是这样的:When a class defines an instance method using the same name, return type, and parameters as a method in its superclass, that method overrides the method of the superclass. 所以说我们在LockDList里面overrideDList的method的时候,prototype一定要完全一样。(ps: Java in a nutshell里面也指出,override时子类返回类型可以是父类返回类型的子类,也就是newNode方法可以返回一个LockDListNode,这种情况称为covariant return,是JDK1.5之后才被允许的,之前的版本不允许)
所以在override newNode的方法的时候,返回类型无论是DListNode还是LockDListNode都是正确的!总之:override的时候,只有返回类型可以不一样,而且这时候返回类型必须是subclass!参数列表必须完全一样!不然就是一个新的method!!!

补充:第三张图片是我在看java in a nutshell 讲子类和继承一章时的截图。在override remove函数的时候,可以直接调用super.remove(node)实现删除一个节点。假如我想调用的是父类的父类的remove的方法的话,是不是可以使用super.super.remove(node)呢?答案是不可以!


PS:czb层主的解析非常到位!

更多图片 小图 大图
组图打开中,请稍候......
回复

使用道具 举报

🔗
F_F 2016-4-26 19:00:13 | 只看该作者
全局:
感谢楼主提供的test.
关于判断继承,教材里面提到了 IS-A 方法,简单记住LockDListNode extends DListNode, 那么LockDListNode IS A DListNode,  所以在任何要返还DListNode的地方返还一个LockDListNode肯定是对的。 其实理解了这点,再做作业,就会发现这点运用起来是多么巧妙,逻辑非常清晰.
更多图片 小图 大图
组图打开中,请稍候......
回复

使用道具 举报

🔗
sunnysun18 2016-4-28 15:58:55 | 只看该作者
全局:
这次作业对于类型转化有了进一步的认识,很棒
更多图片 小图 大图
组图打开中,请稍候......
回复

使用道具 举报

🔗
an小淇 2016-4-29 00:46:00 | 只看该作者
本楼:
全局:
交作业啦~~
更多图片 小图 大图
组图打开中,请稍候......

评分

参与人数 1学分 +1 收起 理由
yingy4 + 1 坚持的不错,再接再厉!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表