20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结

目录

  • 20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结
    • 教材学习内容总结
    • 教材学习中的问题和解决过程
    • 代码调试中的问题和解决过程
    • 代码托管
    • 上周考试错题总结
    • 结对及互评
      • 博客中值得学习的或问题:
      • 代码中值得学习的或问题:
      • 点评过的同学博客和代码
    • 其他
    • 学习进度条
    • 参考资料

20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结

教材学习内容总结

  1. 继承:在父类和子类之间建立一种“是”的关系。
  2. 用于派生新类的原始类称为父类、超类或基类,被派生出的类就称为子类或者亚类。
  3. 继承具有单向性。java中用extends来表示新类由现有类派生。
  4. protected修饰符:当变量声明为protected可见性时,子类就可以引用它,并且使父类保持了一定的封装性。(在UML图中,用#表示protected可见性。)
  5. super引用,使用super引用可以访问父类的成员。子类构造方法负责调用父类构造方法,而且应该在子类的构造方法的第一行用super()引用调用父类构造方法。
  6. java的继承方法为单继承,即子类只能有唯一的父类。在java中可以依赖接口实现多继承,
  7. 重写方法:即子类和父类里面有相同的方法和签名时,子类方法可以重写父类方法,子类方法优先。调用方法的对象决定决定了哪一个版本的方法将被实际执行。
  8. 影子变量:如果在一个子类中声明一个同名变量,则该变量称为影子变量。
  9. 类层次结构:继承关系通常发展成一个类层次结构。在类层次结构中,应当重视合理将类的公共特征保持在尽可能高的层级上。
  10. 所有的类都是直接或者间接由object类派生。object类定义在Java标准类库的java.lang包中。
  11. final修饰符可以限制继承的能力。用final修饰符声明方法,使得该方法在任何派生类中不能被重写。

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

  • 问题1:抽象类和接口的区别?
  • 问题1解决方案:
    抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。抽象类要被子类继承,接口要被类实现。接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个类实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。抽象类里可以没有抽象方法。如果一个类里有抽象方法,那么这个类只能是抽象类。抽象方法要被实现,所以不能是静态的,也不能是私有的。接口可继承接口,并可多继承接口,但类只能单方面继承。
  • 问题2:接口可以实现接口吗?接口可以继承接口吗?这两者有什么关系?
  • 问题2解决方案:接口是常量和抽象方法的集合体。实现接口是指将接口中的抽象方法具体化,继承接口是指将接口中的方法继承下来但不具体化。因此,接口不能实现接口而接口可以继承接口。

  • 问题3:保留字super的作用。
  • 问题3解决方案:
  1. super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)
  2. this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)
  3. super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)
  4. this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名
  • ...

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

  • 问题1:用c语言的方法使用数组,频频报错。

20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第1张图片

20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第2张图片

  • 问题1解决方法:犯了经验主义错误,java定义数组的方法为
String[] s=new String[x];

而且数组容量固定且无法动态改变,而一个新概念“列表”容量可动态增长。于是我修改使用了列表。

20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第3张图片

  • 问题2:加密(解密)算法与加密(解密)密钥有什么区别?
  • 问题2解决方案:密钥使用的背景是开放式环境,也就是说,若算法公开,解密的关键就在于双方使用相同或对称的密钥。简单来说,密钥是一种参数(它是在明文转换为密文或将密文转换为明文的算法中输入的数据)
    加密算法是明文转换成密文的变换函数,是算法。
    同样的密钥可以用不同的加密算法,得到的密文就不一样了

  • 问题3:取余运算时计算出错

20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第4张图片

  • 问题3解决方案:取余运算为a-(a/b)b,但是a/b不是整数,无法正常运算。要将(a/b)b转化为int型。

20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第5张图片

代码托管

{{屏幕快照 2019-10-07 下午10.01.44.png(uploading...)}}

上周考试错题总结

  • 错题1
    20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第6张图片

  • 分析调用构造函数而不是调用方法
  • 错题2
    20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第7张图片

  • 分析:因为一个类可以实现任意数量的接口,所以这个类本质上使用接口类,就好像这些接口是在这个类中定义的一样。这个类继承了接口的方法和常量。此外,该类可以扩展另一个类,从而直接或间接地继承多个类。这与多重继承并不完全相同,但它与Java的概念非常接近
  • 错题3
    20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第8张图片

  • 分析:因为记得Object是所有类的父类,概念混淆。Object类定义clone来创建任何对象的副本,equals用来确定两个对象是否是同一个对象,toString用来将一个对象转换成一个字符串。但是,compareTo不是由对象实现的,必须在希望实现Comparable接口的任何类中实现!
  • 错题4
    20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第9张图片

  • 分析:同一父母的两个孩子之间的关系被称为兄弟姐妹(兄弟意味着性别)。克隆是同一对象的副本,别名是同一对象。在Java中,兄弟和亲戚不用于定义类之间的关系。sibings是兄弟姊妹的意思。
  • 错题5
    20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第10张图片

  • 分析:“is-a”用来表示子类是父类的一种类型。例如,研究生是一种学生。子类是一个更具体的类型。hasa关系指的是类的属性或元素(例如,学生有GPA),而instance-of指的是类和该类的实例化对象之间的关系。没有was-a关系,别名表示引用相同对象或实例的两个变量。
  • 错题6
    20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第11张图片

  • 分析:Extends用于继承…继承是一种is-a关系,而不是has-a关系。想法与上一题相同,认为继承是has-a,所以都选错了。
  • 错题7
    20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第12张图片

  • 分析:Super将允许访问父类的所有非私有成员,但不允许访问私有成员。

结对及互评

博客中值得学习的或问题:

  • 代码练习较多,值得学习
  • 教材理解少了一点

代码中值得学习的或问题:

  • 代码练习较少,希望多加练习
    基于评分标准,我给本博客打分:14分。得分情况如下:
  1. 正确使用Markdown语法(加1分)
  2. 模板中的要素齐全(加1分)
  3. 教材学习中的问题和解决过程(加3分)
  4. 代码调试中的问题和解决过程(加3分)
  5. 其他加分(加5分)
  6. 进度条中记录学习时间与改进情况(1)
  7. 感想,体会不假大空(1)
  8. 有动手写新代码(1)
  9. 排版精美(1)
  10. 点评认真,能指出博客和代码中的问题(1)
  11. 结对学习情况真实可信(1)

点评过的同学博客和代码

  • 本周结对学习情况
    [20182314](https://www.cnblogs.com/juminghan/p/11632336.html)
  • 结对照片
  • 20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结_第13张图片

  • 结对学习内容
  1. 远程计算器的编写
  2. indexOf、StringTokenizer的使用
  3. 接口问题探讨
  • 上周博客互评情况
  • [20182314](https://www.cnblogs.com/juminghan/p/11632336.html)

其他

  1. 国庆期间有认真回顾一下学过的课程,确定一边学习一边总结才能进步
  2. 沉住气多思考!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 42/42 2/2 20/20
第三周 394/471 2/4 25/45
第四周 394/471 2/4 25/45
第五周 1668/2139 2/6 35/80
  • 计划学习时间:30小时

  • 实际学习时间:35小时

  • 改进情况:代码量有所提高,还要提高效率

参考资料

  • 《Java程序设计与数据结构教程(第二版)》

  • 《Java程序设计与数据结构教程(第二版)》学习指导

你可能感兴趣的:(20182330 2019-2020-1 《数据结构与面向对象程序设计》第五周学习总结)