20172328《程序设计与数据结构》第七周学习总结

学号20172328《程序设计与数据结构》第七周学习总结

第九章教材学习内容总结

  • 1.继承的概念:

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

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

  • 问题1:变量声明为protected可见性的封装性不如private可见性严格,但比public可见性很强。
  • 1.(〃‘▽‘〃)本题解答:
    • public:具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。
    • protected:主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西
    • default:有时候也称为friendly,它是针对本包访问而设计的,任何处于本包下的类、接口、异常等,都可以相互访问,即使是父类没有用protected修饰的成员也可以。
    • private:访问权限仅限于类的内部,是一种封装的体现,例如,大多数成员变量都是修饰符为private的,它们不希望被其他任何外部的类访问。
  • 问题2:类的派生代表什么关系?
  • 2.(〃‘▽‘〃)本题解答:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力,是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
  • 问题3:抽象类和接口的区别?
  • 3.(〃‘▽‘〃)本题解答:abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换。

抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。抽象类要被子类继承,接口要被类实现。接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。抽象类里的抽象方法必须全部被子类所实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个类实现接口的时候,如不能全部实现接口方法,那么该类也只能为抽象类。抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abc(){}。抽象类里可以没有抽象方法。如果一个类里有抽象方法,那么这个类只能是抽象类。抽象方法要被实现,所以不能是静态的,也不能是私有的。接口可继承接口,并可多继承接口,但类只能单方面继承。

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

  • 问题1:在做pp9.1时出现错误提示,标明int型不能被应用,但是之前父类MonetaryCoin中我设置面值类型是int类,将其相加之后毋庸置疑还应该是int型,所以很不解。
    ??
    ??
    ??
  • 1.(〃‘▽‘〃)本题解答:和伙伴郭恺讨论之后,他告诉我父类中faceValue初始化有错误,并且我创建的CoinMonetary的对象one数组不能直接相加等于int型变量Sum。因此,错误出在了没有认真将对象和方法辨别清楚。
  • 问题2:同样是在做pp9.1时,自己想使用父类Coin中的随机数掷硬币方法filp并让其顺序输出,当时想到用for-each来做,但是好像思路不正确,也做不出来。
  • 2.(〃‘▽‘〃)本题解答:结对小组超级好用,随即求助大佬。问题迎刃而解,并且还小小的学习了一下for循环和for-each循环的区别。for-each循环
    我们经过讨论(其实是我在听讲),用了两种方法来输出Coin类的filp方法,并将其全部输出。

代码托管(statistics.sh脚本的运行结果截图)

??

上周考试错题总结

  • 问题1: In Java, arrays are(在java中,数组是)
    A . primitive data types(原始数据类型)
    B . objects(对象)
    C . interfaces(接口)
    D . primitive data types if the type stored in the array is a primitive data type and objects if the type stored in the array is an object(如果数组中存储的类型是原始数据类型和对象,如果数组中存储的类型是对象,则原始数据类型是原始数据类型。)
    E . Strings(字符串)
  • 问题1分析和领悟:选择B,在Java中,数组被实现为对象。变量是存储整个数组的内存块的引用变量。
  • 问题2:If an int array is passed as a parameter to a method, which of the following would adequately define the parameter list for the method header?(如果一个int数组作为参数传递给方法,下面哪个选项可以为方法头定义参数列表?)
    A . (int[ ])
    B . (int a[ ])
    C . (int[ ] a)
    D . (int a)
    E . (a[ ])
  • 问题2分析和领悟:选择C,参数被定义为变量最初被声明为类型参数名称。这里,类型为int[],参数为a。当时我觉得B、C一样都可以声明数组,没有好好考虑直接排除了。
  • 问题3:Assume that BankAccount is a predefined class and that the declaration BankAccount[ ] firstEmpireBank; has already been performed. Then the following instruction reserves memory space for
    firstEmpireBank = new BankAccount[1000];(假设BankAccount是一个预定义的类,并且该声明BankAccount[] firstrebank;已经被执行。然后,下面的指令存储内存空间。)
    A . a reference variable to the memory that stores all 1000 BankAccount entries(存储所有1000个BankAccount条目的内存的引用变量。)
    B . 1000 reference variables, each of which point to a single BankAccount entry(1000个参考变量,每个变量指向一个银行帐户条目。)
    C . a single BankAccount entry(一个BankAccount条目)
    D . 1000 BankAccount entries(1000个BankAccount条目)
    E . 1000 reference variables and 1000 BankAccount entries(1000个参考变量和1000个BankAccount条目)
  • 问题3分析和领悟:第一次银行帐户;为firstentity银行保留内存空间,它本身是指向BankAccount[]对象的引用变量。实例化BankAccount[]对象为1000个BankAccount对象。语句保留了1000个引用变量的内存空间。请注意,这1000个银行中没有一个对象。
  • 问题4:Given the following declarations, which of the following variables are arrays?(给定以下声明,下列哪个变量是数组?)
    int[]a、b;
    int c,d[];
    A . a
    B . a and b
    C . a and d
    D . a, b and d
    E . a, b, c and d
  • 问题4分析和领悟:选择D,第一个声明声明a和b都是int数组。第二个声明声明c和d是int型,但d是一个int数组,c是变量。a b和d都是int数组。
  • 问题5:If a and b are both int arrays, then a = b; will(如果a和b都是int数组,那么a = b;将)
    A . create an alias(创建一个别名)
    B . copy all elements of b into a(将b的所有元素复制到a中)
    C . copy the 0th element of b into the 0th element of a(把b的第0个元素复制到a的第0个元素中。)
    D . return true if each corresponding element of b is equal to each corresponding element of a (that is, a[0] is equal to b[0], a[1] is equal to b[1] and so forth) and return false otherwise(如果b的每个对应元素都等于a的对应元素(即a[0] = b[0], a[1] = b[1]等),则返回true,否则返回false)
    E . return true if a and b are aliases and return false otherwise(如果A 和B 是数组就返回ture,否则返回false)
  • 问题5分析和领悟:选择A,“=”是一个赋值运算符。如果两个变量都是原语,比左边的变量副本右边变量(如果a和b是int值,b = 5,然后将成为5)。然而,因为a和b是数组的引用变量设置为参考变量b,导致a和b都引用同一个数组在内存中,或者他们现在彼此的别名。
  • 问题6: A Java main method uses the parameter (String[ ] variable) so that a user can run the program and supply "command-line" parameters. Since the parameter is a String array, however, the user does not have to supply any parameters.(Java主方法使用参数(String[] variable),以便用户可以运行程序并提供“命令行”参数。由于参数是一个字符串数组,因此用户不必提供任何参数。)
    A.True
    B.Flase
  • 问题6分析和领悟: 主方法需要参数,以防程序员希望允许用户提供命令行参数。在java命令之后,在命令行输入的任何内容都将被接受为命令行参数。如果是由空格分隔的几个单词,那么每个单词都作为一个单独的字符串数组元素存储。
  • 问题7:In Java, an array can only store one type of data. For instance, you cannot create an array that stores both double and String values.(在java中,一个数组只能储存一种类型的数据,举个例子,你不能将浮点型和字符串型放一起。)
  • 问题7分析和领悟:选择true, 数组被称为同构类型。这意味着存储在数组中的值的类型必须与每个元素相同。类型由声明决定。因此,int[] x只使x为int值的数组。因此,没有数组可以同时存储double型和String型。
  • 问题8: So long as one is only accessing the elements of an ArrayList, its efficiency is about the same as that of an array. It‘s only when one begins to insert or remove elements towards the front portion of an ArrayList that its efficiency deteriorates.(只要只访问ArrayList的元素,它的效率与数组的效率差不多。只有当一个人开始在ArrayList的前部分插入或移除元素时,它的效率才会变差)
  • 问题8分析和领悟:选择Ture,ArrayList是作为数组实现的,只要其中一个只是访问ArrayList的元素,效率与数组的效率是一样的。但是,当对ArrayList的前部分进行插入或删除时,就会发生大量的元素复制,从而降低其效率。

结对及互评

-20172301
-20172303

点评模板:

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

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

    • 点评过的同学博客和代码

  • 本周结对学习情况
    -20172301
    -20172304

    • 结对学习内容

      • 通过练习pp9.1了解到数组对象和方法之间的区别。
      • 学习了如何在类中写toString方法。
      • 讨论了方法重载和方法重写的区别。
      • 一起学习了for循环和for-each循环的区别和基础用法。
  • 上周博客互评情况

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

继承是我们在学习第七章(7.4)时若隐若现出现的内容,当时没有去思考、去感悟、只简单层次的了解了类之间的调用和聚合关系;其实在学习过程中遗忘的还是蛮快的,这周的心得就是在向前走的时候也回头看看,不让自己丢太多,也让自己融会贯通新知与旧识。In conclusion:I have nothing to offer but blood ,toil,tears and sweat.

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 100/100 1/1 15/15
第二周 377/477 1/2 20/35
第三周 280/757 2/4 22/57
第四周 973/1730 1/5 35/92
第五周 1000/2730 1/6 40/132
第六周 729 /3459 1/7 40/172
第七周 660/4119 2/9 30/192

参考资料

原文地址:https://www.cnblogs.com/LXY462283007/p/8902298.html

时间: 2024-10-27 13:49:13

20172328《程序设计与数据结构》第七周学习总结的相关文章

学号20172328《程序设计与数据结构》第九周学习总结

学号20172328<程序设计与数据结构>第九周学习总结 教材学习内容总结(异常和递归) 第11章:异常 1.[异常处理]: 一个异常:是一个定义非正式情况或错误的对象,由程序或者运行时环境抛出,可以根据需要捕获和处理. 错误:错误类似于异常,但是错误代表不可恢复的问题并且必须捕获处理. 2.[处理异常的三种方法]:①根本不处理异常②当异常发生时处理异常③在程序的某个位置集中处理异常. 3.[未捕获的异常]:如果程序中不处理异常,则程序将非正常的终止运行,并产生关于描述在何处发生什么异常的信息

20172328《程序设计与数据结构》第二周学习总结

20172328李馨雨<程序设计与数据结构>第二周学习总结 又到周五,李馨雨同学要开始写博客了.让我们开始吧!(????) 教材学习内容总结 1.首先是String类定义的字符串,然后是print和println的区别.转义字符的学习.(让我印象深刻的\b[回车符]在字符串结尾不显示哈哈,及其更新的\t[换行符],还有在课堂上真正明白了什么是回车.) 2.了解变量.常量.赋值语句.变量:保存数据的内存单元.常量:坚定自己不会变的数据!除非你用java的反射(有点复杂,改权限.去修饰符等等.没实

20172322 2017-2018-2 《程序设计与数据结构》第二周学习总结

20172322 2017-2018-2 <程序设计与数据结构>第二周学习总结 教材学习内容总结 了解了print与println的区别 了解了字符串的拼接可以用+来完成 了解了转义字符的使用 学会了使用赋值 学会使用部分算术运算符 学会了使用Scanner来实现交互性 教材学习中的问题和解决过程 问题1:在最初接触赋值时对foalt和double的赋值范围不了解 问题1解决方案:使用万能的度娘后看到一个高赞答案后有了了解 问题2:在提前预习时看到2.7图形后敲入的代码无法执行 问题2解决方案

20172326 《程序设计与数据结构》第九周学习总结

学号 20172326 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常(exception):定义非正常情况下或错误的情况的对象,由程序或运行时环境抛出,可根据需要进行相应的捕获处理. 异常与错误的区别:错误代表不可恢复的问题并且必须捕获处理.而异常可以忽视,或者使用try语句处理,或调用更高级的方法. 可检测异常与不可检测异常:可检测异常必须由方法捕获,或者必须在可能抛出或传递异常方法的throws子句中列出来.在方法定义的声明头中追加一条throws子句.不可检测异常不需要使

20172322 2017-2018-2 《程序设计与数据结构》第九周学习总结

20172322 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常 学会了使用try-catch来实现未捕获的异常的处理.可以使得异常被捕获进而不导致程序出现错误退出.使用try写入可能产生异常的语句,使用catch来编写在捕获异常后继续执行的代码(可以为空). "未捕获的异常"指在编译过程中不会被编译软件显示异常但是在运行时会出现异常导致程序直接退出,例如:"ArithmeticException"."In

20172311 2017-2018-2 《程序设计与数据结构》第九周学习总结

20172311 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本周对异常和递归进行了学习 异常的处理方式有两种:一种是直接抛出,并从异常处终止程序:另一种是捕获并处理异常,从而使程序继续运行. 捕获和处理异常主要运用try-catch语句. 通过继承Exception类可以自定义一个新的异常 处理IO异常的常用方法是抛出异常. 对于某些问题,递归是最精炼和适当的解法,但对于其他问题,递归则不如迭代方法直接. 教材学习中的问题和解决过程 问题:什么是IO操作

20172304 《程序设计与数据结构》 第二周学习总结

20172304 <程序设计与数据结构>第二周学习总结 教材学习内容总结 本周主要学习了第三章和第四章的内容 第三章 集合概述--栈 3.1集合 集合是一种聚集组织了其他对象的对象. 集合可以分为两大类线性集合和非线性集合 线性集合:其元素按直线方式组织的集合. 非线性集合:其元素按某种非直线方式组织的集合.例如按层次结构或按网状结构. 3.1.1抽象数据类型 集合十一找给你隐藏了实现细节的抽象 数据类型:一组值及作用于这些数值上的各种操作. 抽象数据:类型(Absttract Data Ty

20172327 2018-2019-1 《程序设计与数据结构》第九周学习总结

20172327 2018-2019-1 <程序设计与数据结构>第九周学习总结 教材学习内容总结 第十五章 图 无向图 1.图的概念(非线性结构):允许树中每个结点与多个结点相连,不分父子结点. 2.图由顶点和边组成. 顶点由名字或标号来表示,如:A.B.C.D: 边由连接的定点对来表示,如:(A,B),(C,D),表示两顶点之间有一条边. 3.无向图:顶点之间无序连接. 如:边(A,B)意味着A与B之间的连接是双向的,与(B,A)的含义一样. 4.邻接(邻居):两个顶点之间有边连接. 5.自

《程序设计与数据结构》第九周学习总结

学号 20172326 <程序设计与数据结构>第九周学习总结 教材学习内容总结 图:图(Graph)是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的.与树的区别在于树中的一个结点只有一个前驱,也就是说只有一个父结点.但图中的顶点(结点)是没有这种限制关系的. 无向图:边为无需结点对的图.也就是说,现有两个顶点A.B.(A,B)与(B,A)效果相同.当两个顶点之间有边连接,也就是说这两个顶点是邻接的,也称作邻居.一个顶点

20172333 2018-2019-1 《程序设计与数据结构》第九周学习总结

20172333 2018-2019-1 <程序设计与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.无向图 ①无向图的定义 图是由结点与结点相连接构成的,与树类似.这些结点被常常称作顶点(vertice),这些顶点的连接叫做边(edge). 无向图(undirected graph)是一种边为无序结点对的图. 两个顶点之间有一条连通边的顶点,我们称作它们为领接的(adjacent).这两个顶点也叫作邻居(neighbor),自己是自己的