20162330 2016-2017-2《程序设计与数据结构》第6周学习总结

本文总结了Java继承的基础知识,包括继承的概念、protected修饰符的作用、super关键字的使用、单多重继承的区别、方法重写等内容。并通过实践解决了学习过程中遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


2016-2017-2 学习总结目录: 1 2 3 4 5 6 7 8 9 10


20162330_刘伟康_ 第6周学习总结

教材学习内容总结

课本内容:(继承)

  • 1.继承概念(派生新类)(is-a关系)(单向);
    1062725-20170409201440207-938801560.png

  • 2.protected(保留某些封装特性)(公有 > 保护可见性 > 私有);
    1062725-20170409195413988-1410766031.png

  • 3.super的引用(调用父类的构造函数);

  • 4.单重继承与多重继承(Java的继承机制是单重继承);

  • 5.方法的重写(区分隐藏变量);

  • 6.类层次(公共特性);

  • 7.Object类与抽象类;(还未掌握)

  • 8.设计继承(DRY);(还未掌握)

蓝墨云班课:(没全部看完)

  • 1.继承初步:(语法)
class <子类> extends <父类>{
}
  • 英文单词理解:扩展,在继承的基础上还可以加以扩展。

  • 目的:减少重复代码。

  • 2.子类实例化教程:具体实践

  • 使用super调用父类构造函数。

  • 3.函数的复写(override)

  • 使用super调用父类的成员函数。

  • 4.对象的转型(向上、向下转型)(还未理解)

  • 向上转型:
Student s = new Student();
Person p = s;
  • 向下转型:
Student s1 = new Student();
Person p = s1;
Student s2 = (Student)p;
  • 5.面向对象应用(一):具体实践

  • 6.抽象类和抽象函数(定义、语法)
abstract void fun();
  • 7.为什么用抽象类:(必要性)

  • 8.Java当中的线程:(正在学习)

教材学习中的问题和解决过程

  • 问题1:在蓝墨云课堂的“子类实例化教程”一课中,老师说到一句话:子类参数的个数和类型要与父类中相同。想尝试当个数类型不同时的输出结果。
  • 问题1解决方案:(动手实践)
  • 开始看视频时,我不太确认我对于生成子类对象的过程的理解是否正确,我认为它的测试类是根据选择不同输出参数对应的成员变量来决定输出的,经过与张旭升的探讨后确认了自己的理解,于是我便想尝试各个成员变量的个数及类型不同时的输出结果。
  • 尝试1:
  • 我先使用super调用了父类中有1个成员变量的构造函数,另外一个Person函数有3个成员变量(一个String,两个int),再尝试在输出类中输入4个整型数值,编译时显示出错:
    1062725-20170409195737332-513293475.png

  • 尝试2:
  • 和尝试一相似,我先使用super调用了父类中有1个成员变量的构造函数,另外一个Person函数有3个成员变量(一个String,两个int),再尝试在输出类中输入3个整型数值和一个String类的值,编译时再次显示出错:
    1062725-20170409195856707-708393940.png
    1062725-20170409195903566-1295531652.png

  • 尝试3:
  • 我在父类中定义了含有1个int变量的函数和一个含有1个int变量,1个String类变量的函数。在子类中没有明确地调用父类的构造函数。结果编译再次错误,这次的实践目的和原因都与前两次不同。
    1062725-20170409195920050-1719772901.png

  • (说明:我之所以尝试了这么多次可能没有太大的意义,但是确实是为了弄清自己不理解的问题,即在生成子类对象的过程中,测试类是否是根据选择不同输出参数对应的成员变量来决定输出的,仅仅通过看视频,我觉得如果在测试类中输入与子类参数类型一样但是参数个数是两个函数中参数之和时,会直接调用这两个函数,输出两个函数一共拥有的参数,但实践证明我的猜测错误,同时我通过尝试3得出了一个结论:创建有参构造函数后,系统就不再有默认无参构造函数。因此在调用时必须指定父类该函数的参数。)

  • 问题2:在阅读到课本中方法的重写一节时,混淆方法重写和之前所学的方法重载的概念。
  • 问题2解决方案:(蓝墨云班课)(搜索)
  • 看了云班课上“函数的复写”课程后,了解了大致区别:即函数的复写是在具有父子关系的两个类中使用,而函数的重载在同一个类中使用。函数复写的父类与子类中两个函数的定义(返回值类型、函数名和参数列表)完全相同,而函数重载只是函数名相同,参数列表不同。查询了网上的相关内容后,加深了概念的理解。
    1062725-20170409200028160-1038300300.png

  • 问题3:在阅读课本时,课本上没有明确交代函数的重写的意义。
  • 问题3解决方案:(蓝墨云班课)(搜索)
  • 蓝墨云班课的老师用几句话简短概括了一下:如果对父类中的函数不满意,那么函数的复写可以对其进行修改。我又搜索了相关内容,其中有一篇写得没看懂,简单来说,就是在继承中,子类可用方法重写对父类进行扩充或改造。
    1062725-20170409200047972-1507384309.png

  • 问题4:不理解返回值,主要就是不知道void返回值为空是个什么概念。
  • 询问队友张旭升并实践,张旭升比较全面地给我讲解,通过对比return语句和void函数的过程实践(过程有些繁多在这里不详细描述了),void返回值为空就应该类似于定义一个动态的字符串类型数组时不把数组内对象实例化的时候打印出现的那个null。
    1062725-20170409200105722-186243633.jpg
    1062725-20170409200113082-1008470477.jpg

代码调试中的问题和解决过程

  • 问题1:编译时产生的中文输入法的符号错误。
    1062725-20170409195507378-1000275896.png
    1062725-20170409195701753-1125476759.png

  • 问题1解决方案:(重新调试)(搜索)
  • 主要是因为我在转换输入法时没有注意到标点符号的类型导致。然后我又搜索了一下关于编译时显示非法字符: '\uff08' 和 '\uff09'的错误,这个错误比较普遍,果然是因为出现大小写错误或者中英文符号的输入法错误。

  • 问题2:出于我对已学内容的思考:在之前讲this调用方法时就讲到对this的调用必须是构造函数的第一个语句,之后讲到super调用的时候,又说super调用参数要是构造函数的第一条语句,之后我就想:如果super和this同时出现在一个构造函数中,顺序会是怎样的呢?
  • 问题2解决方案:(实践)(搜索)
  • 我在蓝墨云班课接下来的课程中刚好看到老师同时使用这两个方法调用构造函数,又将其顺序对换了一下,编译失败,于是我知道了同时出现在一个构造函数中时,还是super语句作第一条语句。
    对换顺序前:
    1062725-20170409200248425-17311252.png
    对换顺序后编译:
    1062725-20170409200350910-1469659408.png
    很显然我在网上找到的大部分解答是错误的!
    1062725-20170409200626957-327047730.png

代码托管

  • week6
    1062725-20170409200655644-183144406.png
    1062725-20170409200701472-1827953118.png
    (statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 上周未进行测试。

结对及互评

  • 本周我主要对于一些基本概念和不理解的知识点(如子类实例化过程)与张旭升进行比较详细的探讨,主要都是他帮助我。非常佩服张旭升的时间控制和实践能力,希望在接下来的学习中,我也可以在其他方面帮到他。

点评过的同学博客和代码

其他(感悟、思考等,可选)

  • 不得不说,虽然本周娄老师在蓝墨云班课上给出了大量视频,但是我没有好好利用,我发现自己本周的状态较差,加上本周的杂事相对较多,我有一种没学到什么的感觉,投入的学习时间也有所下降。
  • 我觉得可能是因为自己的信心不足(之前有出现过此问题)。我先浏览了一遍课本内容,不太懂,又看了一遍,完成示例代码后仍然不太懂,并且感觉之前学过的东西有些遗忘。接着看了蓝墨云班课后虽然对本章内容有所加深,但是整体还是有些杂乱的感觉。
  • 在看到子类实例化时出现了诸多问题,当我一个一个尝试解决后,感觉已经没有兴趣再进行下去,在看到抽象类时,对各个父类子类之间的继承关系、父类子类之间对象的转型又有些晕,我觉得我还是实践地太少(正如张旭升在博客中所说)。
  • 于是我又返回来重新看了一边视频,有的视频看了多次,内容终于基本理解。对于理解能力有些差的我来说,我只想把看过的视频弄懂,就足够了,对于那些没看的视频,我也会花时间补上。
  • 总的来说,本周投入时间较少,理解程度也不够,导致进度拖延,需要再投入一部分时间实践。这也是我这两周没有完成PP任务的原因,感觉操作起来无从下手,现在只能慢慢调整过来(短期目标)。
  • 还有一点就是要培养一种程序员素养,即DRY(长期目标)。

对于下周的学习我仍然能量满满,蓄势待发。

  • 1062725-20170409201917128-610372669.png

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周95/951/412/12学会了编写简单的脚本和课本上的java程序
第二周512/6071/514/26学会了Scanner类编写简单的java程序,了解了数据转换相关知识
第三周484/10911/614/40学会了创建简单的String,Random,Math等类的对象,安装并使用IDEA工具,并且了解了一些java位运算符
第四周1176/22672/824/64学会了条件及循环语句的基本表达,大致了解数组元素及对象数组的概念
第五周838/31051/914/78加深了对面向对象、方法结构和类定义的理解
第六周427/35321/1012/90主要了解super调用函数的方法,继承及其目的

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间: 20小时

  • 实际学习时间: 12小时

  • 有效学习时间:4小时

  • 改进情况:在时间不充裕的情况下,不能对一个知识点太细化地研究。在时间充足的情况下,需要再多投入一部分时间实践。

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

转载于:https://www.cnblogs.com/super925/p/6686151.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值