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. ReactiveSwift源码解析(十一) Atomic的代码实现以及其中的Defer延迟、Posix互斥锁、递归锁

    本篇博客我们来聊一下ReactiveSwift中的原子性操作,在此内容上我们简单的聊一下Posix互斥锁以及递归锁的概念以及使用场景.然后再聊一下Atomic的代码实现.Atomic主要负责多线程下的 ...

  2. .NET Core 2.0 是您的最好选择吗?

    本月14日,微软发布.NET Core 2.0 正式版,它的发布意味着.NET Core平台更加成熟,也预示其更美好的未来.本文将分析.NET Core 的特性以及未来发展方向,为开发人员选择在何种平 ...

  3. iOS - Block底层解析

    Block是iOS开发中一种比较特殊的数据结构,它可以保存一段代码,在合适的地方再调用,具有语法简介.回调方便.编程思路清晰.执行效率高等优点,受到众多猿猿的喜爱.但是Block在使用过程中,如果对B ...

  4. MBProgressHUD1.0.0源码解析

    MBProgressHUD是一个显示提示窗口的三方库,常用于用户交互.后台耗时操作等的提示.通过显示一个提示框,通知用户操作或任务的执行状态:同时,利用动画效果,降低用户等待的焦虑心理,增强用户体验. ...

  5. Windows Graphics Programming Win32 GDI and DirectDraw第六章疑问

    <Windows Graphics Programming Win32 GDI and DirectDraw>6.1节中有这样的描述: The Windows NT/2000 graphi ...

  6. textarea 空格的问题

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

  7. string,char*,int 之间的转化

    c++中经常遇到string,char*,int之间的相互转化,今天就来整理一下. 以下是转载并修改的内容: 以下是常用的几种类型互相之间的转换 string 转 int先转换为char*,再使用at ...

  8. 在WP应用中创建全局应用程序栏

    创建一个WindowsPhone应用程序(这个就不用说了吧,嘿嘿) 打开项目中的App.xaml文件 在打开的App.xaml文件中,如图所示, 在<Application.Resources& ...

  9. windows环境下配置zookeeper

    环境: windows10 zookeeper版本:3.4.9 1.从官网 http://mirror.bit.edu.cn/apache/zookeeper/下载对应的版本 2.将下载的文件解压到任 ...

  10. 关于request和response的中文乱码问题

    相信大家在开发Web项目中都会遇到中文的请求乱码和响应乱码的情况,现在给大家梳理一下并提供解决方案. 1.为什么会出现乱码: 出现乱码的根本原因是浏览器和服务器的解码方式不一致引起的.所以我们统一编码 ...