本周学习总结

1.1 尝试使用思维导图总结有关多态与接口的知识点。

1.2 可选:使用常规方法总结其他上课内容。

接口(interface):对行为的抽象

  • 方法声明和常量值的集合

    • 方法声明:接口中所有的方法默认都是public abstract的
    • 常量值:属性都是public static final的
  • 实现相同接口的类,都有共同的行为
  • 特性
    • 不能使用new进行实例化
    • 使用instanceof运算符:查看对象是否实现XX接口
    • 接口可以扩展
    • 接口中可以包含常量
    • 类可以实现多个接口
    • 默认方法(default method)
  • 接口不是类,而是对类的一组方法的描述(has-a)
  • Comparable接口:implement,比较拥有共同行为的对象

书面作业

##代码阅读:Child压缩包内源代码
**1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。**

answer:编译无法通过。`System.out.println(i);`出现错误。

变量i 是private类型,将其改为protected。private和protected都是访问类中成员权限的限制符,声明为private的成员 只能在本类中调用,所以出错。而声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。

改正为:

程序首先运行Main函数,执行`c.getParenti();c.getParentj();`时调用本类中的getParenti,getParentj方法,此方法里面还使用super关键字调用Parent类中的方法,输出1 2 2 1 1。接着执行`Other.showParentj(p);`调用Other类的方法,输出j和geti()即2 1。

1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。如何更改才能使之正常编译?

answer:编译无法通过。提示

因为它所调用的Person类在另一个包中,且没有定义为public类,无法在另一个包调用。所以要将OutOfParentPackage中所引用的变量j,类Person,类Other访问权限改为public,才能正常编译。

##abstract进阶:阅读GuessGame抽象类的设计与使用源代码
**2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?**

answer:这样改造可以在控制台或使用对话框图形界面输入。定义抽象类和抽象方法,可以在需要时继承后重写调用,可以省去很多代码,方便后期的调用和重写。抽象方法是为了程序的可扩展性。重写抽象方法时可实现同名方法但不同目的的要求。

2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?

answer:继承图形界面的抽象类,操作当中的抽象方法。

2.3 结合该例子,你觉得什么时候应该使用abstract?

answer:使用abstract可以实现多态。使用抽象类作为模板,例如此例中可能需要使用控制台输入改为图形界面输入,就再撰写一个ConsoleGame类,继承抽象类GuessGame(图形界面),操作当中的抽象方法。当需求可能发生变化时,就需要不同的模式,这时候就应该使用abstract,更便于更换,而不用对算法整体做大的改变。

2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。

answer:此例中不变的是算法的逻辑和功能,变化的是输入输出的方法可以是控制台或图形界面。更改输入方法时只需要继承抽象类,而不用在已写好的程序中的输入方式重新再改一遍,算法的逻辑结构不会发生改变。

Comparable与Comparator

3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?

answer:Compareble接口可对指定对象按升序或降序进行排序,类中的compareTo 方法可覆盖原始的排序方法。Arrays类的sort方法是根据compareTo方法的返回值进行排序。重写compareTo后会自动调用此方法。

3.2 有了Comparable接口为什么还需要Comparator接口呢?

answer:Comparable接口将比较代码嵌入自身类中,而Comparator接口在一个独立的类中实现比较。 如果编写的类没有考虑到Compare的问题而没有实现Comparable接口,可以通过 Comparator来实现自定义的比较方法进行排序,修改时只需修改Comparator中的compare方法,不必修改原来的类。

面向接口案例分析

阅读Case-StudentDao.zip案例

4.1 画出类关系图,描述每个类与接口的作用。

answer:Student类:初始化属性name,输出name。
StudentDao 接口类:提供写入,读出,显示学生数据的抽象方法
StudenDaoListImpl类:实现接口StudentDao,创建Student类型的列表来存取学生数据。
StudenDaoArrayImpl类:实现接口StudentDao,创建Student类型的Student[]数组来存取学生数据。

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

answer:StudentDaoArrayImpl是创建数组`Student[]`来存取学生数据,StudenDaoListImpl类则是采用ArrayList列表来存取数据。StudentDaoArrayImpl创建数组要确定数组的size,而StudentDaoArrayImpl类采用的ArrayList相当于动态数组,它的容量能动态增长。

什么是面向接口编程?面向接口编程的好处是什么?

结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!

answer:面向接口编程就是功能提取出来,作为接口。功能的具体实现通过该接口的实现类来完成。当需求变化时,只需编写该逻辑的新的实现类,通过更改该接口的实现类就可以完成需求,不需要改写现有代码。Test.java中可以将使用数组实现改为列表实现,因为它使用的都是StudentDao接口,修改时不用考虑后台具体的实现方式,也不必对程序的所有相关的方法语句做改变。面向接口编程将接口与实现相分离,,方便扩展,可维护性强,从而大大提高程序的灵活性。

##结对编程:面向对象设计(大作业2-非常重要)
**内容**:使用Java代码完成上周做的面向对象设计大作业,需要有初步界面。实现的功能尽量简单,少而精,只包含必要的功能,不要追求高大全。
**写出**:类图(尽量精简,不用太多子类,两个即可)、系统常用功能描述、关键代码与界面
**形式**: 两人依托码云合作完成。请在这里贴出你们的学号、姓名与任务分工。
**注意**: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化大的是输入与输出部分。所以编码的时候,输入(Scanner)与输出(System.out)的代码,请不要将其与某个业务处理函数绑死。

有待完善。。。

类图:

关键代码:





学生A 项目地址
博客地址 项目码云地址


码云上代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

PTA实验总结

1.实现接口implements Comparable<>,<>中要加被排序对象的类型。

2.可用Arrays.sort或Collection.sort对所有实现了Comparable接口的对象进行排序

3.Comparator接口作为一个独立的类可在里面撰写compare方法来实现比较

3.匿名内部类还不是很懂,会好好了解学习

201521123036 《Java程序设计》第5周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. Apache崩掉:为进程配置合适的线程数

    放假以来,服务器Apache二次崩掉了,不能再拖了,找bug解决: 崩掉的具体状况是,服务器出现弹框显示:Apache停止工作: 顺手关掉这个可恶的小弹框,世界就清静了,服务器正常运行: 具体问题: ...

  2. vue2.0 新手教程

    想想自己写vue的项目也写了一年了,从vue1.0到2.0,走过不少路,填过不少坑, 下面记录一下新手从0到1的过程,本文“应该”会持续更新 首先安装vue的运行环境node 1.下载Nodejs并安 ...

  3. C#开发微信公众号-学习笔记

    由于最近要做微信服务号的开发,所以开始找相关说明和接口文档开始学,故把学习过程及注意事项记录一下,帮助想学习的快速上手.废话不多少了,直接上干货! 1.申请微信公众号 这个就不需要多说了吧,大家直接照 ...

  4. Oracle锁表查询与解锁

    锁表查询和解锁 --查询SELECT object_name, machine, s.sid, s.serial# FROM gv$locked_object l, dba_objects o, gv ...

  5. java基础(数据类型,运算符)

    java基础之数据类型(变量) java中存在的数据有常量和变量 常量:在程序执行的过程中其值不可以发生改变 常量的分类 字面值常量 字面值常量的分类 常量 描述 字符串常量 用双引号括起来的内容 整 ...

  6. TensorFlow框架之Computational Graph详解

    1. Getting Start 1.1 import TensorFlow应用程序需要引入编程架包,才能访问TensorFlow的类.方法和符号.如下所示的方法: import tensorflow ...

  7. Sql Server数据库使用触发器和sqlbulkcopy大批量数据插入更新

    需要了解的知识 1.触发器 2.sqlbulkcopy 我的用途 开发数据库同步的工具,需要大批量数据插入和数据更新. 方式 使用SqlBulkCopy类对数据进行数据批量复制,将需要同步数据的表新建 ...

  8. 使用TenforFlow 搭建BP神经网络拟合二次函数

    使用简单BP神经网络拟合二次函数 当拥有两层神经元时候,拟合程度明显比一层好 并出现如下警告: C:\Program Files\Python36\lib\site-packages\matplotl ...

  9. iOS 主题/皮肤之 SakuraKit

    前言 目前市场上很多 App 都有主题变更.皮肤切换的功能.随着项目代码量的不断增长,业务不断完善,功能性代码逐渐趋于模块化,尤其是在多人协作开发同一个项目时,模块解耦尤为重要,同时,公共基础库的功能 ...

  10. sdram控制2

    芯片手册要求sdram需要在64ms内刷新8K次,否则里面的数据会丢失,因此在64ms分成8192次,每次刷新充一次电,然后给两次自动刷新命令即可. /*----------------------- ...