Blog-2总结

(1)前言:总结之前所涉及到的知识点、题量、难度等情况

1.在近期学习过程中,感觉才真正接触到了面向对象方面的知识,首先在继承方面我自己总结了以下一些需要注意的地方

(一)在java中,类只支持单继承,不可以多继承,但是可以有多层继承,但是又不可以有循环继承,就是最后调用的子类构造函数必须带super(),因为子类所有的构造方法中,第一行要么是super要么是this。super与this不共存。

(二)继承的注意事项:  1.子类不能继承父类中被private关键字所修饰的成员变量和成员方法。

             2.子类不能继承父类中的构造方法。 

(三)在继承中设计方法的重写,方法重写也可以叫做覆盖。根据书本上的定义,我认为是在子父类继承中,子类中出现与父类的声明完全一致的方法,就称为方法的重写,我们在进行方法重写的时候可以事先加上@override系统则会帮我们判断是否为正确重写,声明不一就会报错。其中有一个比较小的知识点是子类重写方法的返回值类型是可以不一致的,其中的条件是父类方法的返回值是子类方法返回值的父类,这个在后来学习到多态的时候我才了解到这是多态的一种表现形式。

(四)在学习这部分的过程中自己开始一些不理解的地方有:关于链式法则,因为有继承,说明子类可以访问父类的成员变量,也就意味着父类的成员变量一定要有才可以被使用,所以在创建子类对象的时候,会先调用子类的构造方法,而子类的构造方法会先去调用父类的构造方法,目的就是给父类的成员变量初始化。

多态:

(一)在学习和使用多态的过程中,我发现要在满足一定条件下才能使用多态,首先必须要有继承关系,其次要有方法的重写,同时要用父类的引用变量指向子类对象。例如我们有一个父类class Fu{} 一个子类class Zi extends Fu{} 我们可以这样定义Fu fu  =  new Zi(),来是父类引用指向子类。但是在多态使用过程中会有一些弊端,调用成员变量时,只能调用父类中有的成员变量,不能调用子类特有的成员变量和成员方法,但是在调用父类中有的成员方法子类进行重写的方法时,会实现动态绑定,此时父类调用的是子类中重写的方法。至此我发现了多态的一些弊端,父类引用是不能使用子类特有的内容的,但是java中提供了转型的方法,我们可以根据特定的情况去进行转型。

面向对象三大特征,封装继承多态,以上是我在近期学习过程中我个人对继承和多态的理解,前期我认为题目量不是很大但是具有较大的难度。

 

(2)设计与分析:重点对题目的提交源码进行分析,可参考SourceMonitor的生成报表内容以及PowerDesigner的相应类图,要有相应的解释和心得(做到有图有真相),本次Blog必须分析PTA中的图形类设计的题目、超星中链表类练习题目以及期中考试的三道题目

1.PTA中图形类设计的题目(此处篇幅原因就不进行代码黏贴):这次的题目,我解决了之前没有解决的一个问题,就是对输入格式的检查,很浅显正确的格式只有一个,而错误的千奇百怪,我们如果一个一个去检查一定难度是非常大的,在查找资料后发现我们可以利用正则表达式去解决此类问题,我在学习它过程中发现了有两个非常实用的网站:一个是用来练习的:https://www.codejiaonang.com/   另一个用来测试的:https://regexr-cn.com/  我就是利用这两个网站,首先了解了正则表达式基本的语法,然后再做题过程中在测试网站上去测试修改,最后改出来的此次题目的正确表达式,符合全部格式检测的情况。处理完输入后就是算法,因为程序设计要满足情况考虑全面,但是在处理过程中,比如四点是否构成四边形,我用两点连线做一条直线,再计算另外两点到直线距离是否为零,但是后来自己发现这样是不行的有些情况两点到直线距离都不为零,但是有三个点在同一条直线上,这样就是不行的。然后就是之后的多个功能,都没能作出完备的算法来区分所有的情况,之后还是要多锻炼算法的设计和思考方式。在这次作业中也学到了很多的东西,正则表达式的使用,多功能程序设计的结构。

2.近期的实验:近期所做的实验都是在农夫过河小游戏的基础上进行的,主要考察了我们对类,继承,和多态的掌握情况。第一次实验,没有用到继承,让我们完成农夫过河这个小游戏,但是在完成过程中我遇到了一个问题,羊吃白菜,狼吃羊都是只有在农夫不在的情况下才能完成,但是羊类中吃白菜的方法并没有传入农夫的参数,所以我们并不能访问到农夫的成员变量crossRiver,所以就不能判断是否在什么情况下,羊能否吃白菜以及狼能否吃羊,否则就没有办法赢得游戏,所以我的解决办法是将农夫的成员变量crossRiver设为静态变量使其可以通过类名来访问,从而在方法吃白菜和吃羊的方法中加入判断。第二次加入船类之后,我就将农夫成员变量设为私有,因为船只有在农夫的操作下才能过河,故他们始终在同一侧,之后用船的位置来判断是否能吃白菜和是否能吃羊,这是因为我没有在题目所给代码上进行修改,我认为,如果在传参上做一定的改变,将能对类和方法进行更好的封装。最近关于多态的第三次实验一,多态我主要是利用将子类共有的方法放到父类,而为了在使用多态是父类引用能来调用子类方法,在父类中将子类特有方法写一个空方法,在子类中进行重写。从而实现多态。后来我认为子类特有的方法不应该放到父类中,可以通过向下转型方式实现对子类特有方法的调用。

3.期中考试的题目主要考察了我们对继承多态的掌握情况,第三题考察了接口ArrayList,我认为前两题是比较好实现的,第二题为什么要是用抽象方法,我认为是便于多态的使用,我们并不需要创建父类的对象,所以可以将父类对象定义为抽象,而抽象类的继承也规定了,抽象类的子类必须重写父类中所有的抽象方法。将所有方法的子类参数换位父类,因为多态,所以这种操作是合法的。

 

(3)采坑心得:对源码的提交过程中出现的问题及心得进行总结,务必做到详实,拿数据、源码及测试结果说话,切忌假大空

  在写实验过程中遇到的一个问题就是,想利用多态,所以用父类引用指向所有的子类对象,但是会出现报错,无法找到方法,后来查阅资料和课本,这其实也是多态的一个弊端,我们没有办法通过父类的一个引用去调用子类中特有的方法,而我的解决办法是在父类中加入一个同样的方法,此时子类中就是重写的方法,此时可以通过动态绑定调用到该重写方法;但是将子类特有的方法放入父类,显然不太符合逻辑,所以我利用了向下转型的方法,想要调用子类特有方法是使用强制类型转换,将父类引用转换为子类引用,此时在既不改变原来的父类引用的同时实现了对子类特有方法的调用。

 

(4)改进建议:对相应题目的编码改进给出自己的见解,做到可持续改进

  题目的编码希望能给出对应的注释,毕竟这一部分不是我们自己进行书写的,读代码耗费的时间和精力都较多,虽然读代码也是我们需要锻炼的一部分能力,

(5)总结:对本阶段(7-10周)综合性总结,学到了什么,哪些地方需要进一步学习及研究,对教师、课程、作业、实验、课上及课下组织方式等方面的改进建议及意见。、

1.在学习过程中我认为听老师的讲课知识学习这部分知识的开始,在实际情况中怎么操作和一些细节都要靠我们在实践的过程中自己去了解和学习,在下一步学习过程中要多对课本的源码去进行实现,弄清楚知识的底层逻辑,这是非常重要的,如果有哪些方面的知识不懂,在写代码的过程中会变得非常被动,语法知识最基础的方面。

2.在本阶段的学习过程中感受到了学习节奏的越来越加快,知识也越来越深入,认希望老师能在部分知识进行更深一点的讲解。

posted @ 2022-05-09 18:01  21201212-李明  阅读(55)  评论(0)    收藏  举报