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. Sybase数据库的连接,JNDI配置,Hibernate配置

    最近的一个项目就是移植老项目的代码,有一个模块用的是Sybase数据库,我表示从来没接触过,更不用说怎么用了.再者这东西都是几乎被淘汰的东西了,而且网上搜到的东西简直了,全是复制粘贴的. 一.使用工具 ...

  2. Loadrunner常见错误处理方法

    1.错误 -26601: 解压缩函数(wgzMemDecompressBuffer)失败,返回代码=-5 (Z_BUF_ERROR).inSize=0.inUse=0.outUse=0 用LR做压力测 ...

  3. 搭建 keras + tensorflow

    每次搭建深度学习环境的总要搜索各类参考.  这次搭环境,自己做个记录.这样以后搭建环境就拿自己 的文章做主线索引.  (如果参照我的博客安装的,欢迎转载分享 ) 1. 安装操作系统 (ubuntu-1 ...

  4. Obj-C 实现 QFileDialog函数

    Obj-C 实现 QFileDialog函数(getOpenFileName/getOpenFileNames/getExistingDirectory/getSaveFileName) 1.getO ...

  5. java多线程基础(synchronize关键字)

    [toc] 基础知识 ---- 线程:进程(process)就是一块包含了某些资源的内存区域.操作系统利用进程把它的工作划分为一些功能单元. 线程:进程中所包含的一个或多个执行单元称为线程(threa ...

  6. BotVS趋势交易策略-MACD

    MACD低买高卖自动跟单滑动止损策略 , 基于Python实现. 交叉后前一柱指金叉后的第一柱的值, 交叉后前一柱指金叉前的最后一个柱的值, 滑动价格指下单时加的价格,比如买单会现价加上这个价格,卖单 ...

  7. 环境配置-云服务器jdk与tomcat配置

    我所实践的主机是麻花疼云的主机,第一次试用30天,装了个centos6.5,其实已经用商用专用镜像配置好环境了,包括jdk.tomcat等常用的内容,但是我实在是找不到他们安装在哪个目录下了,我就自己 ...

  8. jQuery方法输出有几个checkbox框被选中

    每选中一个多选框,输出有多少个选中 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...

  9. 学习js函数--自执行函数

    我在写代码时候经常会在tpl的<script>里写类似的代码: $(function(){ alert("我好饿"); }); 刚开始的时候只知道写了它不需要调用,直接 ...

  10. DOS命令运行java文件,批量引用jar包

    进入class文件目录 cd:\workspace\workspace_goodsownersystem\workspace_goodsownersystem\goodsownersystem\tar ...