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周学习总结的更多相关文章

  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. box-sizing 属性应用

    1.box-sizing属性功能 官方说明文档为:http://www.w3school.com.cn/cssref/pr_box-sizing.asp box-sizing 属性允许您以特定的方式定 ...

  2. 重构tableview!

    昨天用字典构筑tableview简直愚蠢!不过蠢过才知道如何写出好的代码.下面将用模型重构tableview! -------------------------------------------- ...

  3. C++新建Dialog程序

    1.新建: IDE VS2013 新建项目|C++|MFC,选择“基于对话框” 2.为Dialog添加类 在Dialog(界面)上右键,选择“添加类”,然后再弹出界面输入类名即可. 为什么要添加类? ...

  4. 【可视化】Echarts3坐标系倒映

    目标: 用echarts实现在一个echarts图表中包含上下两个坐标系 横轴合并在一块.有一种上下对称水映的视觉效果 要点提示:grid 是一个数组 包含两个grid xAxis,yAxis也都是数 ...

  5. /bin,/sbin,/usr/sbin,/usr/bin 目录

    这些目录都是存放命令的,首先区别下/sbin和/bin: 从命令功能来看,/sbin 下的命令属于基本的系统命令,如shutdown,reboot,用于启动系统,修复系统,/bin下存放一些普通的基本 ...

  6. JAVA中反射机制一

    反射一 基本概念 一.反射机制的基本概念 什么是反射?反射是指在运行状态中,对于任意一个类,都可以获取到这个类的所有属性和方法:对于任意一个对象,都能够调用这个对象的任意方法和属性:这种动态获取信息及 ...

  7. 7.21.03 while循环和do...while循环

    while循环 while是最基本的循环,它的结构为: while( 布尔表达式 ) { //循环内容 } 只要布尔表达式为true,循环体会一直执行下去. 有时程序也需要死循环. 实例 public ...

  8. 史上最全前端面试题(含答案)-B篇

    面试有几点需要注意面试题目: 根据你的等级和职位变化,入门级到专家级:范围↑.深度↑.方向↑.题目类型: 技术视野.项目细节.理论知识型题,算法题,开放性题,案例题.进行追问: 可以确保问到你开始不懂 ...

  9. 以太坊系列之十六: 使用golang与智能合约进行交互

    以太坊系列之十六: 使用golang与智能合约进行交互 以太坊系列之十六: 使用golang与智能合约进行交互 此例子的目录结构 token contract 智能合约的golang wrapper ...

  10. jdbc hibernate myBatis比较

    jdbc hibernate myBatis比较 jdbc 优点:性能高,易掌握 缺点:代码繁琐 hibernate 优点:不用写sql,代码简洁 缺点:性能不好 自动生成的sql效率低下(复杂业务) ...