1. 本周学习总结

2. 书面作业

1.代码阅读:Child压缩包内源代码

1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。

1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。

1.3 回答:如果为了访问到protected修饰的属性或方法应该怎么办?

1.1 不能通过编译;在Child类中public void getParenti()语句显示The field Parent.i is not visible的错误;可以将Parent类中的i属性的修饰符private改为protected,因为i属性原先是private,只能在自己的类中使用,不能在其他类中调用;输出结果:调用getParenti()方法先输出i,由于继承父类Parent,所以输出1,之后调用getParentj()方法,输出super.j(继承父类的j属性),p.j(也是父类的j属性),j(父类的j属性),p.geti()(调用父类的p.geti()方法,输出i),super.geti()(继承父类的方法geti(),输出i),调用Otrer的方法showParentj(),由于是静态方法,直接运行,输出p.j和p.geti(),结果是1 2 2 1 1 2 1

1.2 不能通过编译,显示错误The type Parent is not visible,因为Parent前未加任务修饰符,修饰符为默认,而showParentj只能在本类或是在本包中才能调用,所以或出错,所以可以加大权限,在Parent前加public

1.3 protected的访问范围是本类,同一个包或是子类,所以要访问protected修饰的属性或方法可以在同一个类中调用protected修饰的属性或方法,火灾同一个包中或是子类中调用protected修饰的属性或方法

2.abstract进阶:阅读GuessGame抽象类的设计与使用源代码

2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?

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

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

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

2.1 在未改造前,只能在控制台输出,在改造后,使用抽象类,可以在控制台,也可以使用对话框图形界面等输入,给人多种的方式选择输入,不必只局限于控制台输出

2.2 可以用java.awt.*包来设计图形界面,是java抽象窗口工具包,提供如Button(按钮)、TextField(文本框)和List(列表)等的图形

2.3 abstract用于抽象类,主要是声明却没实现其功能,可以在声明自己想实现的功能时就使用adstract,就像求面积和 和 周长和,可以先声明,之后再想如何实现功能,在本例子中,public abstract void printpublic abstract void printlnpublic abstract int nextInt就先声明,在子类ConsoleGame类中则在对其补充(覆盖)

2.4 不变的是在随机产生的0到9的数字的猜测,改变的是public abstract void printpublic abstract void printlnpublic abstract int nextInt三个抽象方法的声明,并且ConsoleGame类继承GuessGame类,在ConsoleGame类中三个抽象方法得到实现(运行后,在数字猜对时,应该可以再输入一个数字,但不能输入,scanner.nextInt()应该能再输入一个数字,???)

3.Comparable与Comparator

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

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

3.3 可选:使用匿名内部类、Lambda表达式实现PTA编程5-2。

3.1 此接口强行对实现它的每个类的对象进行整体排序;在类中实现Comparable接口后,调用Arrays.sort()时,传入的是对象,根据指定比较器产生的顺序对指定对象进行排序

3.2 Comparator的实现是要再写一个类后在编写Comparator方法,可以说是一个专用的比较器,当对象不支持自比较函数或者自比较函数不满足要求时(即不能通过Comparable实现对象的排序),可以写一个比较器来完成两个对象之间大小的比较

4.面向接口案例分析

阅读Case-StudentDao.zip案例

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

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

4.1.

  • StudentDaoArrayImpl类作用:public StudentDaoArrayImpl设置一个长度为size的students数组;public Student readStudent输入一个名字,若students数组中有学生的name与输入的名字相等,则返回该学生,否则返回null;public boolean writeStudent输入一个学生,若数组中有空位(null),则把此学生加入students数组,并返回true,否则返回false;public void diplayAllStudent()输出全部的学生

  • StudenDaoListImpl类作用:设置一个以Student对象的ArrayList,并命名List;public Student readStudent输入一个名字,若List中有学生的name与输入的名字相等,则返回该学生,否则返回null;public boolean writeStudent输入一个学生,加入List,并返回true;public void diplayAllStudent()输出List的全部学生

  • Studen类作用:用来创建对象,属性为学生的名字,创建对象的名字并覆盖toString方法

  • public interface StudentDao接口:抽象类,声明public Student readStudentpublic boolean writeStudentpublic void diplayAllStudent()三个抽象方法

4.2 StudentDaoArrayImpl是用数组来存储学生,此存储方式有个弊端就是学生的数量一开始就要决定,且无法改变,有可能造成数量的过少浪费内存或数量过多而无法存储学生;StudenDaoListImpl使用ArrayList来存储学生,在空间上基本无约束

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

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

  • 面向接口编程:实现一个系统的时候,将方法的声明与实现分开,使用接口,让类实现接口,接口中是抽象方法,在类中实现该方法,这样方法声明与实现就可分开来

  • 面向接口编程的好处:在修改某个模块时,不必引起其他模块的大改动

  • 在Test.java中,实现学生的存储,只需要实现学生的输入,查找和输出即可,还未决定如何实现,也就是StudentDao接口的三个抽象方法,一开始用数组来实现功能,若要改变成ArraysList的存储方式,不需要将main里的函数大浮动改动,只需再写一个类来实现,main由于是调用StudentDao接口的抽象方法,所以不用改动现有代码,在观看代码时也很容易理解

6.结对编程:面向对象设计(大作业2-非常重要)

内容:使用Java代码完成上周做的面向对象设计大作业,需要有初步界面。实现的功能尽量简单,少而精,只包含必要的功能,不要追求高大全。

写出:类图(尽量精简,不用太多子类,两个即可)、系统常用功能描述、关键代码与界面

形式: 两人依托码云合作完成。请在这里贴出你们的学号、姓名与任务分工。

注意: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化大的是输入与输出部分。所以编码的时候,输入(Scanner)与输出(System.out)的代码,请不要将其与某个业务处理函数绑死。

选做加分: 给出两人在码云上同一项目的提交记录截图,额外加分。注:两个人在码云上新建一个项目。

6.1

学生A 学生B 项目地址
http://www.cnblogs.com/gemola/p/6611057.html https://git.oschina.net/gemola/javalearning/blob/shop/README.md

6.2

6.3 (此次对象设计只设计了关于书籍的购买,并无其他商品,无帐号,直接购买)

import java.util.*;

public interface Shop {//接口
public double totalprice(List<Commonity> com);//购买的物品的总价
public void shopcar(List<Commonity> com);//购物车一览
}
//主要是构建个shop的抽象类,设置计算总价和购物车一览的抽象方法 public class Commonity {//商品类
private String name;//商品名字
private double price;//商品价格
private int numble;//商品购买的数量 public Commonity(String name,double price,int numble)
{
this.name=name;
this.numble=numble;
this.price=price;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getNumble() {
return numble;
}
public void setNumble(int numble) {
this.numble = numble;
}
@Override
public String toString() {
return "Commonity [name=" + name + ", price=" + price + ", numble=" + numble + "]";
} }//建立商品的类,包括商品的名称,价格和购买数量 public class Total implements Shop{//总价
public double totalprice(List<Commonity> com){
double t=0;
for(Commonity a:com){
t=t+a.getPrice()*a.getNumble();
}
return t;
} @Override
public void shopcar(List<Commonity> com) {//购物车一览
// TODO Auto-generated method stub
for(Commonity a:com){
System.out.println("书籍:"+a.getName()+" 价格:"+a.getPrice()+" 购买数量"+a.getNumble());
} }
}//实现输出总价和购物车一览的功能

6.4 运行界面

  • 一开始的界面

  • 开始输入商品名

  • 继续购买

  • 购物车一览和输出总价

3. 码云上代码提交记录及PTA实验总结

3.1. 码云代码提交记录

3.2. PTA实验总结

  • 建立类实现Comparable接口 语法:[修饰符] class 类名 implements<类名>{} 5.1对Comparable进行改写,用于对象的名字的排序,调用方法Arrays.sort(数组),实现多个接口,implements +接口1,接口2......。若是使用ArrayList来进行排序,则调用的方法改为Collections.sort(),结果一样

  • 建立类实现Comparator接口 与Comparable接口不同,这是个专门的比较器,需要另写类来实现(Comparable接口的方法compareTo只需在建好的类中编写),编写两个类:NameComparator和AgeComparator,在调用时的区别就是加入该类,Arrays.sort(数组,new NameComparator())和Arrays.sort(数组,new AgeComparator())实现对象的name属性的排序和对象的age属性的排序。若使用ArrayList,则调用的方式为Collections.sort(ArrayList,接口)

  • 接口匿名内部类,直接调用接口方法,语法 Interface i=new Interface{抽象方法}; 最后一定要有";" ,或者直接 new Interface{抽象方法};

201521123017 《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. 设计模式的征途—19.命令(Command)模式

    在生活中,我们装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或换气扇.在购买开关时,用户并不知道它将来到底用于控制什么电器,也就是说,开关与电灯.换气扇并无 ...

  2. java实现网页爬虫

    接着上面一篇对爬虫需要的java知识,这一篇目的就是在于网页爬虫的实现,对数据的获取,以便分析. -----> 目录:   1.爬虫原理 2.本地文件数据提取及分析 3.单网页数据的读取 4.运 ...

  3. Mac实用操作技巧(二)

    输入特殊字符.Emoji表情符号 有的场景需要输入诸如café中的é字母,这时可以按下Option + E之后,再按下E即可输入(注意需要将中文输入法关闭,包括搜狗输入法).还有更多的特殊符号可以输入 ...

  4. DVWA笔记之一:brute Force

    1.Low 级别 burpsuite抓包 low级别是使用GET请求进行登录,将其发送到Intruder中,并增加password变量 之后选择字典开始攻击. 暴力破解完成后,查看结果RESULT,根 ...

  5. 设计模式,Let's Go! (上)

    * { color: #3e3e3e } body { font-family: "Helvetica Neue", Helvetica, "Hiragino Sans ...

  6. 地图性能测试利器PerfQA Analyzer

    PerfQA Analyzer作为一个地图性能测试工具,能针对ArcGIS 技术堆栈的系统进行性能问题的排查,用于系统试运行阶段的压力测试以及在线系统运维.大大减轻了GIS系统管理员的性能调优工作压力 ...

  7. JavaScript 中的相等性判断

    摘自:MDN https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness: Ja ...

  8. BotVS开发基础—2.7 指标MA

    代码 #计算一小时 MA5均线 # 时间 2017-06-29 00:00:00 -2017-06-30 00:00:00 1小时 实盘级Tick # 平台 OCKCoin BTC def main( ...

  9. 关于springmvc接受简单参数和List集合数据的实现

    首先要创建一个搭建一个springmvc的工程,至于如何搭建这里就不说了.给出比较重要的配置,项目目录结构如下,弄的比较简单,因为最近遇到一个需要传递List集合数据的问题,所以就当做实验. web. ...

  10. 在Debian9(linux)上使用 的 python 3 IDLE(已经安装了python 2.7 的情况下)

    在Debian9(Stable)中默认安装了python2.7和pytohon3.5两个版本,但是没有IDLE,本人想用pytihon3.5的IDLE,将本次解决问题在此Mark一下, 首先,执行 s ...