201521123077 《Java程序设计》第5周学习总结
1. 本周学习总结
1.1 尝试使用思维导图总结有关多态与接口的知识点。
举个小栗子:

右侧的四个类都实现了同一个接口,所以可以让游戏类的引用指向实现类的实例,根据不同类型的实现类可以表现出不同的特性,所以他们表现出了多态性
1.2 可选:使用常规方法总结其他上课内容。
- Comparable Comparator 接口的使用
- 抽象类的使用
2. 书面作业
Q1. 代码阅读:Child压缩包内源代码
1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
不能编译通过
public void getParenti(){
System.out.println(i);
}
中间输出i这里会报错,因为父类Parent的i是private访问权限的,子类也不可访问。
调用继承自父类的geti()方法即可。
1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。
也不能编译通过
- 因为Parent为默认的包访问权限 即只有在同一个包内才可以访问这个类
System.out.println(p.j);这里也不能访问jSystem.out.println(p.geti());这里的geti()也不能访问
2.3点的错误都是因为这两个方法/属性是protected访问权限的,该权限允许子类及同一包内访问,不允许其他包访问
1.3 回答:如果为了访问到protected修饰的属性或方法应该怎么办?
将该类放到同一包内或是继承该类
Q2.abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
将游戏中的方法设定为抽象方法,使其不与某个特定的函数绑定,使用的时候只要对应的重写该抽象方法即可,便于在转移至另一个平台的时候修改
2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
重写 1.print 2. println 3.nextInt方法
例如nextInt方法就可以 :
用swing做一个数字键盘,通过点击对应的数字时获取不同的数字传入go()函数内 。
2.3 结合该例子,你觉得什么时候应该使用abstract?
当某个类/方法只是作为一个模板的作用时就可以把它设为abstract,具体实现的时候再把抽象变为具体就好
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
变化的是游戏中人机交互的输入输出,不变的是猜数字这个游戏的游戏逻辑
所以我们将变化的部分设为abstract,在使用的时候写一个新类继承自这个抽象类,并实现它的抽象方法
程序编写的时候将变化与不变的部分分离开可以有效的减少未来需要修改时候的成本
Q3.Comparable与Comparator
3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
使实现它的类具有可排序的性质
因为类实现了Comparable接口之后,并重写了它的compareTo方法后,Arrays.sort排序的时候就可以通过调用compareTo方法确定用户类的两个对象之间的顺序
3.2 有了Comparable接口为什么还需要Comparator接口呢?
Comparable使实现它的类具有了可排序的性质,但是该类的排序规则在类编写完毕后就是确定的了
而Comparator的使用就比较灵活了,实现这个接口的类完全可以不要任何其他的方法属性,仅仅作为一种“比较器”作为排序方法的参数来使用,利用这个方法我们可以在不修改某个类的情况下对它进行不同规则的排序
3.3 可选:使用匿名内部类、Lambda表达式实现PTA编程5-2。
匿名内部类:

Lambda表达式环境不支持还没有尝试
Q4面向接口案例分析
阅读Case-StudentDao.zip案例
4.1 画出类关系图,描述每个类与接口的作用。

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
二者都是对同一个接口的实现
储存数据的形式不同,前者用arraylist保存,后者直接用数组保存
然后具体的写/读数据方式都不一样,根据具体的保存方法具体定制,例如list就只要调用add方法就可以添加,数组则需要通过遍历找到第一个未被赋值的位置并赋值
Q5.什么是面向接口编程?面向接口编程的好处是什么?
结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!
编程的时候先写好接口,然后根据这些接口来编程,项目的各个独立的部分依靠接口来对接,相当于设定了一个各部分共同遵守的规则来保证程序各部分能够正常的组合在一起
如第三题中sort方法负责根据Comparable接口确定排序规则,而用户类遵守Comparable接口规则来实现具体的比较关系
第四题中也是如此用户只需要知道StudentDao接口中的方法可以写/读数据,而不依赖具体怎么做到的
面向接口编程使程序有更高的灵活性,修改成本也变得更低
第6题提交作业的结构:*
- 6.1
| 学生A孙慧君201521123098 | 学生B孙志威201521123077 | 项目地址 |
|---|---|---|
| http://www.cnblogs.com/niverse745 / | https://home.cnblogs.com/u/agts | https://git.oschina.net/agts/Online_shopping.git |
6.2 常用功能描述框架图

6.3 关键代码
主要框架:

购物车添加:

购物车删除:

查找商品/商家:

保存商品到购物车:

商品排序方法:

商品查找:

6.4 运行界面
主界面:

登录:

菜单:

添加删除:

排序:

筛选:

注册: (生成用户数据文件) (为了展示将所有用户列出)

防止暴力破解(冷却时间):


Q2面向对象设计(大作业)
3. PTA实验总结及码云上代码提交记录
3.1本周PTA截图

3.2 实验总结
4.1 将具体行为写在actionListener的actionPerformed方法里,
但是自己定义的Scanner sc会遇到无法在内部类中使用的问题,遵循建议将其设为final就行了
5.1 重写compareTo方法即可
5.2 重写compare方法即可
5.3 stack.pop的时候只要将“指针”往栈底移动就好,没必要将要pop的那一位数据清零,然后注意做好判断不要越界就好
201521123077 《Java程序设计》第5周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- CSS3基础(2)—— 文字与字体相关样式、盒子类型、背景与边框相关样式、变形处理、动画功能
一. CSS3 文字与字体相关样式 1. 给文字添加阴影 text-shadow: length length length ccolor; 属性适用于文本阴影,指定了水平阴影,垂直阴影,模糊的距离, ...
- Linux操作系统位数查看
--Linux操作系统位数查看----------------------2014/05/11 查看linux是多少位的几位方法:查看linux机器是32位还是64位的方法: 方法一:file /sb ...
- flume 1.7 的配置
Apache Flume是一个分布式的.可靠的.高效的日志数据收集组件:我们通常使用Flume将分散在集群中多个Servers的log文件,汇集到中央式的数据平台中,以解决"从离散的日志文件 ...
- phoenix常用命令
1.登录命令 ./sqlline.py localhost:2181:/hbase-unsecure span { font-family: "Courier New"; font ...
- uploadify 在chrome上崩溃的解决办法
使用Uploadify进行文件上传,Chrome经常会报“喔唷,崩溃啦”的错误,见下图: 很显然,这是Chrome浏览器缓存功能,所导致的问题.从LOG里也能看到:正常的情况下,会请求文件(jquer ...
- Linux粘滞位的设置
粘滞位(Stickybit),或粘着位,是Unix文件系统权限的一个旗标.最常见的用法在目录上设置粘滞位,如此以来,只有目录内文件的所有者或者root才可以删除或移动该文件.如果不为目录设置粘滞位,任 ...
- Python 一等函数
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } 在 Python 中,函数是一等对象.编程语言理论家把"一等 ...
- Django编写RESTful API(一):序列化
欢迎访问我的个人网站:www.comingnext.cn 关于RESTful API 现在,在开发的过程中,我们经常会听到前后端分离这个技术名词,顾名思义,就是前台的开发和后台的开发分离开.这个技术方 ...
- node里面的c/c++模块
准备工作 node使用c++插件时需要使用node-gyp包,node-gyp把c++源码编译为二进制文件,js在调用二进制文件,编译后的二进制文件模块调用就和js的模块调用一样. npm insta ...
- JAVA中反射机制一
反射一 基本概念 一.反射机制的基本概念 什么是反射?反射是指在运行状态中,对于任意一个类,都可以获取到这个类的所有属性和方法:对于任意一个对象,都能够调用这个对象的任意方法和属性:这种动态获取信息及 ...