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. Qt日常备注(函数/接口实现)

    1.判断QString是否为纯数字 2.查找自身最长重复子字符串 3.树形列表复选框操作 4.更改文件权限 5.判断系统64位 6.文件生成md5值 7.版本号比较(字符串比较) //-----实现- ...

  2. testng相关的Annotation注释方法,

    2 - Annotation这里是TestNG中用到的annotation的快速预览,还有它们的属性. @BeforeSuite: 被注释的方法将在所有测试运行前运行,方法将只运行一次@AfterSu ...

  3. node.js之setTimeout()、clearTimeout()与 setInterval()与clearInterval()

    1.setTimeout函数与clearTimeout函数 setTimeout(cb,ms,[arg],[...])延时一定时间执行回调函数该函数中cb参数为必填函数,为需要执行的回调函数ms为经过 ...

  4. 神经网络与深度学习笔记 Chapter 3.

    交叉熵 交叉熵是用于解决使用二次代价函数时当单个神经元接近饱和的时候对权重和bias权重学习的影响.这个公式可以看出,当神经元饱和的时候,sigma的偏导接近于0,w的学习也会变小.但是应用交叉熵作为 ...

  5. Linux云计算 面试时最常遇到的40个问题

    1)使用云计算有哪些优点? 使用云计算有下列优点: a)备份数据和存储数据b)强大的服务器功能c)SaaS(软件即服务)d)信息技术沙盒功能e)提高生产力f)具有成本效益,并节省时间 2)可否列举哪些 ...

  6. 理解JavaScript的立即调用函数表达式(IIFE)

    首先这是js的一种函数调用写法,叫立即执行函数表达式(IIFE,即immediately-invoked function expression).顾名思义IIFE可以让你的函数立即得到执行(废话). ...

  7. textarea 空格的问题

    如果textarea开始标签和结束标签中间有空格,则textarea默认有空格. <textarea name=" > </textarea> 效果图 所以,如果想去 ...

  8. [Linux] Desktop Management

    xrandr --output Virtual1 --mode 1360x768 Extend Display Size

  9. emacs命令记录

    C-代表按住Ctrl键 M-代表按住Alt键,也可以用按一下ESC放开代替   最先要记住的 M-x <cmd>      输入指令执行,在输入时用Tab可以自动补全或列出项目 C-g   ...

  10. Java 调用Azure认知服务Demo--Computer API

    说明 本文主要介绍使用Java代码,基于HTTP请求调用Microsoft Azure的认知服务.图片来源分别介绍了使用公网的URL和上传本地图片. 依赖的jar包下载地址: key的获取需要登录到A ...