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 ...
随机推荐
- 微信小程序简单入门2
底部tab "tabBar": {"list": [{"pagePath": "pages/lists/lists",& ...
- Session获取不到的情况及解决办法(源码解析)
本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处,请尊重他人努力成果,谢谢. 1. 当有连个sessionFactory时,容易产生获取不到session的情况 ...
- Python 3.X安装配置
0x01 安装Python 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的. 本教程安装的是python-3.6.1-amd64版本. Python官网:https ...
- python中类的属性(class attribute)的解释
python中的类叫 class object,类的实例叫instance object. 类 Class Objects 类拥有两种操作,1.类属性 attribute references 2.实 ...
- Navicat提示Access violation at address 004E9844 in module ‘comctl32.dll’
内存越界问题,重新注册下Windows的动态链接库,首先“开始”—“cmd”,在打开的dos窗口中运行“for %1 in (%windir%\system32\*.dll) do regsvr32. ...
- iOS组件化方案的几种实现
最近研究了一下项目的组件化,把casa.bang.limboy的有关组件化的博客看了一遍,学到了不少东西,对目前业界的组件化方案有了一定的了解.这些高质量的博客大致讨论了组件化的三种方案:url-bl ...
- css3中的动画效果
css3中的animation属性动画效果代码如下: <!DOCTYPE html> <html lang="en"> <head> <m ...
- 挖个坑,写一个Spring+SpringMVC+Mybatis的项目
想挖个坑督促自己练技术,有时候想到一个项目,大概想了一些要实现的功能,怎么实现.现在觉得自己差不多能完成QQ空间的主要功能了.准备立个牌坊,写一个类似功能的网站.并且把进度放到这里来. 初步计划实现以 ...
- Response.Write 、RegisterClientScriptBlock和RegisterStartupScript总结
Response.Write .RegisterClientScriptBlock和RegisterStartupScript总结 Page.ClientScript.RegisterStartupS ...
- python基础教程(九)
python异常 python用异常对象(exception object)来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的 回溯(Traceback, 一种错误 ...