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

1.2 可选:使用常规方法总结其他上课内容。
1、ArrayList只能存放对象;
2、对象包装类之间使用equals进行比较;
3、接口可以实现非继承关系的类之间的共同属性功能,可以理解为这些类has a共同的行为;
4、实现了compareble接口的对数组中的元素可以用Arrays.sort进行排序;
5、同继承,可以使用instanceof检查对象是否实现接口;
6、接口中的常量用final修饰,并且可以实现多个接口。
2. 书面作业
代码阅读:Child压缩包内源代码
1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
错误的运行结果:

正确的运行结果:

不能编译通过;
运行结果如上;
根据提示可知:将Parents类中的变量i变为protected修饰即可。
输出结果如上;
结果分析:1 是 c.getParenti() 函数的打印结果;
2 2 1 1 是 c.getParentj() 函数的打印结果;
2 1 是 Other.showParentj(p) 函数的打印结果;
并且由于i、j是Parent类的protected变量,Child继承Parent类,允许访问。
1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。


编译无法通过,Parent、i、j、getj()是不可见类型,需用public进行修饰,public可以对所有用户开放,默认类只对当前类和同一个包中允许访问,在不同的包中不可使用。
2、abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
抽象类的一个特点是必须被继承,并且抽象方法必须被重写。这样的好处就在于里面的抽象方面如果是放在任意一个类中就被绑定而其他类不得使用,将输出方法作为抽象方法,可以在对话框或者图形界面等其他界面输出。
2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
设计一个图形界面的类继承GuessGame类,重写GuessGame类中的输出操作。
2.3 结合该例子,你觉得什么时候应该使用abstract?
当某种属性或者方法需要在不同的界面或者类中重新定义和使用时使用抽象类。
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
变化的是使用抽象类将共有的属性方法封装,可在不同领域中使用。不变的是在类中使用被重写与改进前的方法是相同的。
比如用抽象类的Shape对面积周长获取的方法进行声明,则在不同的继承Shape类的其他类中分别重写了面积周长获取方法,当计算面积周长时可直接调用shape,而不用分开调用在相加。
此例中,将输入的方法在抽象类中声明,继承的同时进行重写,就可以在不同的界面(类)中使用。
3、Comparable与Comparator
3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
Comparable接口中有CompareTo方法进行对象之间的比较,并且可以自定义比较的内容。但前提是要实现Comparable接口才行。
Arrays.sort的排序功能相当于是冒泡法对数值数组进行排序,只是数组中的元素是对象。
Arrays.sort其实是面向Comparable接口进行编程,因此不需要考虑具体的实现类。
3.2 有了Comparable接口为什么还需要Comparator接口呢?


从以上JDK文档看来:
虽然两个都是用于比较的,但是Comparable是用于实现内部的排序,而Comparetor是一个专用的比较器,用于当对象使用comparable进行的自身比较不符合要求时,可以用comparetor比较器对两个对象进行外部程序的比较
4、面向接口案例分析
阅读Case-StudentDao.zip案例
4.1 画出类关系图,描述每个类与接口的作用。

class Test:main()函数,写数据,界面处理;
class Student:属性、构造函数、方法;
interface StudentDao:声明writeStudent、readStudent、diplayAllStudent函数;
class StudenDaoListImpl:获取学生姓名,添加学生信息,打印学生信息。
class StudentDaoArrayImpl:将不为空并且与参数同名的学生返回,学生信息的存入,成功则返回true。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?


从以上源代码进行分析:
StudenDaoListImpl是存放Student的动态数组,无需定义数组大小,writeStudent只使用add操作进行添加,而StudentDaoArrayImpl则需要开辟一个数组大小为确定值的数组,并且writeStudent需要对数组中的元素进行名字的比较,相同则将学生信息进行存储。
5、什么是面向接口编程?面向接口编程的好处是什么?
面向接口编程是指药使用已经声明好的接口中,对其中声明的方法进行重新定义编写,比如题目4中的StudentDao接口中声明了读、写操作,StudenDaoListImpl 、StudentDaoArrayImpl 类实现了Student接口,同时也分别对读写操作进行编程。
接口编程将接口与实现分离,就像电脑的USB接口,不需要知道插入的是光盘、数据线或者其他,即接口隐藏了实际功能,但是通过声明有了统一的操作界面和使用方式。
6、结对编程:面向对象设计(大作业2-非常重要)
内容:使用Java代码完成上周做的面向对象设计大作业,需要有初步界面。实现的功能尽量简单,少而精,只包含必要的功能,不要追求高大全。
写出:类图(尽量精简,不用太多子类,两个即可)、系统常用功能描述、关键代码与界面
形式: 两人依托码云合作完成。请在这里贴出你们的学号、姓名与任务分工。
注意: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化大的是输入与输出部分。所以编码的时候,输入(Scanner)与输出(System.out)的代码,请不要将其与某个业务处理函数绑死。**


public class Test {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Shoppingcart cart = new Shoppingcart();
Product[] p = new Product[3];
p[0] = new Product("算法导论", 99.8, 3);
p[1] = new Product("java程序设计", 45.6, 10);
p[2] = new Product("杀死一只知更鸟", 20.6, 1);
Menu m=new Menu();
m.menu(cart, p);
}
}
public class Shoppingcart {
ArrayList<Product> prolist = new ArrayList<Product>();
public void addpro(Product pro){
prolist.add(pro);
}
public void printlist(){
System.out.println(prolist);
}
public double calprice(){
double totalprice=0;
for (int i = 0; i < prolist.size(); i++) {
totalprice+=prolist.get(i).price*prolist.get(i).num;
}
return totalprice;
}
}
public void menu(Shoppingcart cart, Product[] p) {
System.out.println("1、商品信息:");
System.out.println("2、购物车:");
switch (sc.nextInt()) {
case 1: {
System.out.println(Arrays.toString(p));
System.out.println("选择添加商品序号:");
switch (sc.nextInt()) {
case 1: {
cart.addpro(p[0]);
}
case 2: {
cart.addpro(p[1]);
break;
}
case 3: {
cart.addpro(p[2]);
break;
}
}
menu(cart, p);
}
case 2: {
if (cart.prolist.isEmpty())
System.out.println("您的购物车是空的哦!");
else {
System.out.println("结算总计:");
cart.printlist();
break;
}
menu(cart, p);
}
}
}
public class Product {
String name;
double price;
int num;
public Product(String name,double price,int num){
this.name=name;
this.price=price;
this.num=num;
}
}
public interface Print {
public void print(String string);
public String next();
public int nextint();
}
运行结果:

|学生A|学生B|项目地址|
|:--------|:---------|
|http://www.cnblogs.com/zxl3066|http://www.cnblogs.com/201521123065hyw|
3. 码云上代码提交记录及PTA实验总结
3.1. 码云代码提交记录

3.2. PTA实验
T1:几个类写在一个文件时,PersonSortable类要放于主函数类外。
T2:使用Arrays.sort进行排序的元素都要实现comparable接口;使用接口不需要考虑实现接口的类之间的层次关系。
大作业:初接触接口要特别注意static的使用与否,函数中方法定义static类型,外部同样也要使用static。盲目的跟着报错的提示改错会越改越多。
201521123065 《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 ...
随机推荐
- [NOIP2011] 聪明的质监员 二分+前缀和
考试的时候打的二分但没有用前缀和维护.但是有个小细节手误打错了结果挂掉了. 绝对值的话可能会想到三分,但是注意到w增大的时候y是减小的,所以单调性很明显,用二分就可以.但注意一个问题,就是二分最后的结 ...
- vi替换方法总结
1. 基本的替换 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ ...
- 巧妙利用JS中的自定义函数——化繁为简,提高效率
利用自定义函数编写年月日时间表: (复杂写法)如下: <body> <select id="year" size="1&q ...
- 2017年最新15个漂亮的 HTML 摄影网站模板
摄影是一门艺术,它需要大量的耐心和努力工作来捕捉那些精彩的瞬间.如果你是一位热情的摄影师,想要建立一个网站来展示那些高质量的摄影作品,那么你找对地方了.本文包含15个最佳的摄影网站模板,你可以使用这些 ...
- 移动端JS判断手势方向
原生JS判断手势方向的解决思路: 1.滑动屏幕事件使用html5 的touchstart滑动开始事件和touchend滑动结束事件. 2.方向的判断,以起点做平面坐标系,与终点连线做直线,直线与x正半 ...
- KVO实现自定义文件复制进度展示
一.创建文件 说明:自定义文件类,通过NSFileManager 以及NSFileHandle 实现文件的创建和copy,为了控制内存的并发使用,通过控制每次赋值的固定长度来分多次复制: NSStri ...
- SpringMVC入门--编写一个SpringMVC小程序
一.SpringMVC的优势 Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一.Spring3.0 后全面超越 Struts2,成为最优秀的 M ...
- 【Oracle】表空间管理
--表空间管理为主.附带 权限管理.数据字典 /* 表空间是逻辑结构,数据文件是物理结构 一个表空间对应多个段segment 段可以对应多个数据文件.跨磁盘 一个段对应多个盘区 extent 一个盘区 ...
- 关于原根的存在性及个数(Primitive Root Theorem)
我在RSA学习总结的第三部分关于Mille-Rabin素数测试的正确性证明里需要用到此定理,由于证明太长,故另开一章于此.(为啥我说话突然文绉绉了Orz,可能是这周辩论打多了) 结论是对素数p,mod ...
- java se之File类
遍历某个目录路径下的所有文件并打印输出: package com.led.file; import java.io.File; public class File_List { public stat ...