1. 本周学习总结#

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


2. 书面作业#

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

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

答:不能通过编译,从上图可以看到public void getParenti()这条语句出现了问题语句显示The field Parent.i is not visible.原因是因为父类中的i是用修饰符private,只能在自己的类中使用,不能在其他类中调用;可以将private改成protected;

运行结果:

c.getParenti();输出父类中的i也就是1,c.getParentj();输出super.j,j,geti(),super.geti(),也就是2 2 1 1,Other.showParentj(p);输出父类中的j和i 就是2 1;所以运行结果就是1 2 2 1 1 2 1.

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

答:不能通过编译,显示错误The type Parent is not visible,因为Parent前未加任务修饰符,修饰符为默认而OutOfParentPackage在外包使用,所以就不能使用Parent的方法。要修改的话在Parent类的前面加上public即可。 System.out.println(p.j);改成p.get(j).

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

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

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

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

//改造前
package cc.openhome; import java.util.Scanner; public class Guess {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = (int) (Math.random() * 10);
int guess; do {
System.out.print("猜数字(0 ~ 9):");
guess = scanner.nextInt();
} while(guess != number); System.out.println("猜中了...XD");
}
}
//改造后
package cc.openhome; public class Guess {
public static void main(String[] args) {
GuessGame game = new ConsoleGame();//这边使用了抽象类GuessGame
game.go();
}
} //GuessGame.java
package cc.openhome; public abstract class GuessGame {
public void go() {
int number = (int) (Math.random() * 10);
int guess;
do {
print("输入数字:");
guess = nextInt();
} while(guess != number);
println("猜中了");
} public abstract void print(String text);
public abstract void println(String text);
public abstract int nextInt();
}
答:可以看出,在未改造前,未使用抽象类,只能在控制台输出。在改造后,使用抽象类,可以在控制台,也可以使用对话框图形界面等输入,给人多种的方式选择输入,不必只局限于控制台输出。

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

答:可以使用java.awt和swing包来设计图形界面。

AWT(Abstract Window Toolkit),中文译为抽象窗口工具包,是Java提供的用来建立和设置Java的图形用户界面的基本工具。AWT由Java中的java.awt包提供,里面包含了许多可用来建立与平台无关的图形用户界面(GUI)的类,这些类又被称为组件。Swing是一个用于开发Java应用程序用户界面的开发工具包。以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。

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

答:abstract用于抽象类,抽象方法指的是只有声明而没有方法。例如求图形面积的时候,有各种各样的图形,但它们都有一个求面积的方法,这时候就可以用到抽象类。或者未来要需要这种方法是,可以先使用抽象方法。

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

答:在这个例子中变化的是运行环境,不变的是猜数字这个游戏。使用了abstract进行编程就可以在不同平台运行,它会根据用户实际的情况而改变。但是继承就是子类复用了父类的方法。

Q3. Comparable与Comparator##

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

// Insertion sort on smallest arrays
if (length < INSERTIONSORT_THRESHOLD) {
for (int i=low; i<high; i++)
for (int j=i; j>low &&
((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
swap(dest, j, j-1);
return;
} // Merge sorted halves (now in src) into dest
for(int i = destLow, p = low, q = mid; i < destHigh; i++) {
if (q >= high || p < mid && ((Comparable)src[p]).compareTo(src[q])<=0)
dest[i] = src[p++];
else
dest[i] = src[q++];
}
答:Arrays有一方法 public static void sort(Object[] a)功能:对指定对象数组按升序进行排序, 数组中的所有元素都必须实现 Comparable 接口。因为sort源代码中运用到了(Comparable)这是一个类型指派,也就是说要转化成Comparable才能正确使用该方法。然而如果一个类并没有去操作Comparable接口,它就不能被正确的指派。

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

答:compareTo()方法是放在对象类里面的,在集合内部实现compareTo()的方法。Comparator是在集合外部实现的排序,compare()是放在比较对象的类外面的。当对象不支持自比较函数或者自比较函数不满足要求时(即不能通过Comparable实现对象的排序),可以写一个比较器来完成两个对象之间大小的比较。

Q4. 面向接口案例分析##

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

  • Student类:提供属性name。
  • StudentDao接口:提供三个抽象方法,写入学生数据、读取学生数据和显示所有学生信息。对于写入学生数据,通过一个boolean变量来判断是否写入成功。
  • StudentDaoArrayImpl类:用数组来存放学生信息,具体实现接口的三个抽象方法,读取学生信息,如果找不到返回null;如果遍历整个数组,没找到学生信息返回false。显示所有学生信息则要求对象都是非空的。然后还有一个构造器,提前根据用户的输入开对应长度的数组。
  • StudenDaoListImpl类:用列表来存放学生信息,具体实现接口的三个抽象方法。

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?###

答:两种方法实现的结果相同但是StudentDaoArrayImpl是用数组来存储学生,此存储方式有个弊端就是学生的数量一开始就要决定,有可能造成数量的过少浪费内存或数量过多而无法存储学生;StudenDaoListImpl使用ArrayList来存储学生,可以随意增加空间。

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

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

题目3用到了两个接口,分别是Comparable和Comparator。通过这两个接口,我们可以很方便的对数据进行比较,并且比较规则可以根据自己想要的方式进行。题目4,类似于一个存放学生数据的数据库。在这个Test类里面,我们只要做的就是确定数据到底是以何种数据结构来存放。这些都是一开始从设计之初就相好的。
接口就是系统设计规范应是定义与实现分离。
接口的好处就是可以不用提供实现细节,而只是提供该接口应该具备怎样的行为,或者说具有什么方法.

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

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

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

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

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

6.1

黄绍桦 学生B 项目地址
https://www.cnblogs.com/huangsh/ https://git.oschina.net/huangsh1/test.git

6.2

6.3

import java.util.*;

public class Product {
private String productName;// 商品名称
private double price;// 单价 public Product() {// 无参构造
super();
} public Product(String productName, double price) {
super(); this.productName = productName; this.price = price;
} @Override
public String toString() {
return "Product [productName=" + productName + ", price=" + price + "]";
} public String getProductName() {
return productName;
} public void setProductName(String productName) {
this.productName = productName;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} public class ProductItem extends Product {
private int count;// 商品数量 public double totalMoney() {// 小计
double price = super.getPrice();// 获取商品单价
return price * count;
} public ProductItem() {
super();
} public ProductItem(int count) {
this.count = count;
} public int getCount() {
return count;
} public void setCount(int count) {
this.count = count;
} } public interface Shop {// 接口 public void shopcar1(List<ProductItem> com);// 购物车一览
} public class Cart implements Shop { @Override
public void shopcar1(List<ProductItem> com) {// 购物车一览
// TODO Auto-generated method stub
for (ProductItem p : com) {
// TODO Auto-generated method stub
System.out.println("商品名" + p.getProductName() + "数量" + p.getCount() + "总价" + p.totalMoney()); } }

6.4 运行界面

(电脑里编译出错)


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

3.1 码云代码提交记录##

3.2 PTA实验总结##

  • 5-1 Arrays.sort不能对自定义对象进行排序。实现Comparable接口建立类实现Comparable接口 语法:[修饰符] class 类名 implements<类名>{};
  • 5-2 Comparator是在集合外部实现的排序,compare()是放在比较对象的类外面的。需要另写类来实现。
  • 接口匿名内部类,直接调用接口方法,语法 Interface i=new Interface{抽象方法};

201521123014 《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. adb shell screenrecord命令行使用说明

    一.查看帮助命令,参数 --help D:\>adb shell screenrecord --help Usage: screenrecord [options] <filename&g ...

  2. MySQL的grant,revoke使用

    MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant sele ...

  3. 【转载】QT MySQL数据库操作总结

    转载自http://blog.chinaunix.net/uid-28194872-id-3631462.html #include <QtSql> QT += sqlQSqlDataba ...

  4. Oracle存储过程和函数使用方法

    一.存储过程(PROCEDURE) 使用过程, 不仅可以简化客户端应用程序的开发和维护,而且可以提高应用程序的运行性能.  CREATE [OR REPLACE] PROCUDURE procedur ...

  5. shell 脚本编程之特殊变量

    $0 当前脚本的文件名$n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2.$# 传递给脚本或函数的参数个数.$* 传递给脚本或函数的所有参数.$@ ...

  6. Mac OS X 终端命令开启功能

    1.系统目录下显示资源库2.Finder显示隐藏文件3.Xcode卸载4.在Finder标题栏显示完整路径5.去掉窗口截屏的阴影6.强制Safari在新标签中打开网页7.改变截屏图片的保存位置 1.系 ...

  7. CSSc常用样式

          一.CSS常用文本属性 1.css中的颜色表示方式   1.1直接使用颜色的单词表示:red.green.blue     1.2使用颜色的十六进制表示:#ff0000,#00ff00: ...

  8. 利用CSS hover伪类改变其他元素的总结

    :hover 伪类经常用于页面的一些鼠标交互.链接点击变化,增强页面的用户体验,但是可以用来改变其他元素样式,可以在不使用JS 的情况下,达到想要的页面效果. 1.hover改变自身的效果: 鼠标悬浮 ...

  9. JSP 页面传值方法总结(转)

    原文地址:http://www.cnblogs.com/java-class/p/6358964.html 阅读目录 1. URL 链接后追加参数 2. Form 3. 设置 Cookie 4. 设置 ...

  10. 【Zookeeper】角色、顺序号、读写机制

    角色 leader 负责进行投票的发起和决议,更新系统状态 learner 包括follower和observer follower用于接受客户端请求并向客户端返回结果,在选举过程中参与投票 obse ...