1. 本周学习总结

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

2. 书面作业

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

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

答:无法编译通过,Parent.i不可视;将Parent.java中的i变量由private修改为protected

输出结果为:

1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。如何更改才能使之正常编译?

答:无法编译通过,类型Parent不可视(Parent的类型不为public);将Parent的类型更改为public即可正常编译

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

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

答:这样的改造为之后的编程人员丰富游戏的图形界面预留了操作空间,后来的编程人员只需按图索骥,完成对相应抽象类的丰富即可

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

答:对相应的抽象类进行代码上的丰富,以便输出相应的图形界面

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

答:1.当程序的某些功能未定时,可以使用abstract起到一个提纲的作用方便以后的编写;

2.当父类与子类存在同名的方法,且子类的方法实现方式与父类不同,此时可在父类中定义抽象方法,在子类中覆盖父类中的抽象方法

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

答:变化的是:这个猜数游戏的执行方法,在改造之后它可以用控制台执行也可以使用图形界面执行;

不变的是:猜数游戏中的具体实现部分:

int number = (int) (Math.random() * 10);
int guess;
do {
print("输入数字:");
guess = nextInt();
} while(guess != number);
println("猜中了");

在改造之前,猜数游戏只可以直接通过控制台的输入完成程序的执行,在改造之后,引入了一个抽象类GuessGame,并在其中定义了方法go(),以及抽象方法

public abstract void print(String text)

public abstract void println(String text)

public abstract int nextInt() 在这个基础上编写了ConsoleGame类对GuessGame中定义的虚拟方法进行继承

3.Comparable与Comparator

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

答:Comparable接口中含有方法:

    public interface Comparable{
int compareTo(Object other);
}

可以让不同对象的元素之间相互比较,而所有实现了本接口的类都必须实现该方法

同时,Arrays有一方法

    public static void sort(Object[] a) {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a);
else
ComparableTimSort.sort(a, 0, a.length, null, 0, 0);
}

可以对指定对象数组按升序进行排序, 并且要求数组中的所有元素都必须实现 Comparable 接口

见该方法的说明:



所以我们可以直接使用Arrays.sort对某个实现了Comparable接口的类进行排序

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

答:例如:Comparable接口与Comparator接口的排序方式不同,Comparable接口使用字典顺序排序(Arrays.sort),Comparator接口则可以自定义排序方式;从一定程度上说Comparator接口是对Comparable接口功能的一种补充

4.面向接口案例分析

阅读Case-StudentDao.zip案例

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

答:

Student类:一个(String )name属性以及getter/setter和toString()方法的类

StudentDao接口:提供三个抽象方法,写入,读取学和显示所有学生信息,并且通过一个boolean变量来判断是否学生信息写入成功

StudentDaoArrayImpl类:用数组来存放学生信息并实现接口中的相应抽象方法

StudenDaoListImpl类:用ArrayList的方法来存储学生信息并学生数据

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

答:StudentDaoArrayImpl中采用了students数组存放学生信息,而StudenDaoListImpl采用ArraysList实现

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

答:面向接口编程:接口中定义了抽象方法,编写代码实现接口中的抽象方法,做到代码与接口相关联,将接口与实现相分离

面向接口编程的好处:在编写代码的时候可以忽视接口(后台)的具体情况,例如StudentDao sdm = new StudentDaoArrayImpl(50); ;这样使得接口中的情况无论如何变化,主程序中的代码只要做少许改动即可适应接口的调整,大大提高了程序的灵活性

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

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

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

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

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

第6题提交作业的结构:

6.1

学生A 学生B
http://www.cnblogs.com/wufuckshuo null

6.2 常用功能描述框架图

6.3 关键代码

package shopping ;

import java.util.Scanner;

class Login {// 账户类
private String userName;
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Login(String userName,String password){
this.userName = userName;
this.password = password;
}
boolean isLogin( ){
// if()
// return true;
return false;
}
} class Search {// 搜索类
private String keyWord;
boolean search(String keyWord) {
Goods g=new Goods();
if(keyWord==g.getName())
return true;
return false;
}
} class freePost extends Goods{//判断是否包邮
private boolean isFreePost;
} class sortFromSalesVolume extends Goods{//按销量排序
sortFromSalesVolume(){ }
} class Goods {// 商品类
private String name;
private String price;
private boolean freePost;// 是否包邮
private int salesVolume;//销量
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
} } class ShoppingCart {// 购物车类
private double totalPrice;
ShoppingCart sc=new ShoppingCart();
public void add(Goods g) {
this.sc.add(g);
} public void del() { } public void pay() { }
} public class ShoppingSystem {// 购物平台
public static void main(String[] args) {
System.out.println("Welcome");
Scanner in=new Scanner(System.in);
System.out.println("1.登录\n2.搜索\n3.按销量排序\n4.exit");
System.out.println("Your choose:");
int choose=in.nextInt();
switch(choose){//Menu case 1:Login l=new Login (in.next(),in.next());
break;
case 2:
case 3:
case 4:break; }
in.close();
}
}

6.4 运行界面

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

题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2. PTA实验

继续完成前面未完成的实验面向对象1-基础-封装继承

编程(5-1, 5-2)

实验总结

5-1:创建关于Person的数组,对Comparable接口中的compareTo()方法进行覆盖使之满足题目要求,最后使用Arrays.sort()得到答案

5-2:编写NameComparator类与AgeComparator类,按要求对两个类的Comparator进行编写(覆盖了该接口中的compare方法)使其满足题目要求排序命令可以通过Collections.sort(List,Comparator)或者Arrays.sort(Object[],Comparator)的形式得到执行

201521123057 《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. [BZOJ 1054][HAOI 2008]移动玩具 状态压缩

    考试的时候一看是河南省选题,觉得会很难,有点不敢想正解.感觉是个状压.但是一看是十年前的题,那怂什么! 直接把十六个数的状态压进去,因为个数是不变的,所以状态枚举的时候只要找数目一样的转移即可.而且只 ...

  2. IDE eclipse PyDev插件安装

    Python安装成功后,即要配置开发环境,这里选用Eclipse, 在Eclipse中安装PyDev插件,有多种方法,这里介绍最最常用的两种. 1)使用Eclipse安装插件,打开eclipse,进入 ...

  3. Entity Framework 帮助文档

    Entity Framework (EF) 帮助文档 在代码中定义实体,并生成数据库模型 原文链接 基于已有数据库创建 Code First 实体模型 原文链接 Entity Framework Fl ...

  4. angular学习(三)-- $scope

    1.3 视图数据模型:$scope $scope 是用来视图和数据之间的胶水.粘合剂 视图和控制器之间的数据桥梁 用于在视图和控制器之间传递数据 用来暴露数据模型(数据.行为) 监视模型数据的变化,做 ...

  5. 前端到后台ThinkPHP开发整站(1)

    1.前言: 我个人从来没有写过博客文章,作为一个程序员没有自己的博客算是一个合格的程序员,所以我地想想也要经营起一个的博客,做一个小项目,写这博客算就做这个项目的一个项目笔记吧!现在自学着ThinkP ...

  6. fstab设置开机挂载--鸟哥[阅读]

    設定開機掛載: 手動處理 mount 不是很人性化,我們總是需要讓系統『自動』在開機時進行掛載的!本小節就是在談這玩意兒! 另外,從 FTP 伺服器捉下來的映像檔能否不用燒錄就可以讀取內容?我們也需要 ...

  7. window响应拖拽文件操作

    window响应拖拽文件操作 1.首先调用DragAcceptFiles,让控件或者窗体支持文件拖动操作函数功能:用来为拖放文件作初始化.函数原型: void DragAcceptFiles( HWN ...

  8. SQL连接操作

    一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1 ...

  9. 剑指offer——矩阵覆盖(斐波那契变形)

    ****感觉都可以针对斐波那契写一个变形题目的集合了****** 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? cl ...

  10. PYTHON:新闻聚合

    这个项目看了有段时间,因为一直没跑通,而且关于NNTP也不是特别理解.这里是转载code123的分析. 原文地址:http://www.code123.cc/1327.html 书中的第四个练习,新闻 ...