201521123025<java程序设计>第五周学习总结
1. 本周学习总结

2. 书面作业
1.代码阅读:Child压缩包内源代码
1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。
1.3 回答:如果为了访问到protected修饰的属性或方法应该怎么办?
答:(1)Child.java文件不能编译通过,System.out.println(i)会出错,因为父类Parent的i是被private定义,即i只能被父类自身访问;所以应该把private改为protected。
输出结果为

c.getParenti();输出父类Parent的i,虽然这边没有使用super,但是子类Child没有重新定义i,所以输出的还是父类的i=1;c.getParentj();输出父类的j,父类的j,父类的i和父类的i。子类没有重新定义j和i,这边加不加super结果都是一样的。Other.showParentj(p);输出父类的j和父类的i,因为是static修饰的,所以直接用类名调用。
(2)提示错误**The type Parent is not visible**,需要将parent文件中的protected int j=2 protected int geti()改为public int j=2; public int geti()才能通过编译。
(3)同一个包内访问到protected修饰的属性或方法要使用super(),不同包则要把访问权限定义为public。
2.abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
2.3 结合该例子,你觉得什么时候应该使用abstract?
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
//改造前的
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");
}
}
//改造后的
//Guess.java
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();
}
答:(1)改造前,未使用抽象类,只能控制台输出;改造后,使用抽象类,可以在控制台,也可以使用对话框图形界面等输入。
(2)利用Javax Swing,系统能够根据用户的输入给出用户的猜测结果。
(3)抽象类定义:包含抽象方法的类,抽象类必须在类前用abstract关键字修饰。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现,抽象方法必须用abstract关键字进行修饰。所以当项目有大体的框架,没有具体的方法,就要使用abstract,然后在子类中具体实现方法。
(4)这个例子中,输入和输出是变化的,但是对生成随机数,比较输入数和生成数的方法是不变的。父类GuessGame使用abstract,声明了数字处理方法,而子类继承并覆盖父类的方法。
3.Comparable与Comparator
3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
3.2 有了Comparable接口为什么还需要Comparator接口呢?
3.3 可选:使用匿名内部类、Lambda表达式实现PTA编程5-2。
答:(1)Comparable接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序,类的compareTo方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。
(2)
底下的是我从百度搜索得到的结果
①、Comparator位于包java.util下,而Comparable位于包java.lang下。
②、Comparable接口将比较代码嵌入需要进行比较的类的自身代码中,而 Comparator接口在一个独立的类中实现比较。
③、如果前期类的设计没有考虑到类的Compare问题而没有实现Comparabl e接口,后期可以通过Comparator接口来实现比较算法进行排序,并且为 了使用不同的排序标准做准备,比如:升序、降序。
④、Comparable接口强制进行自然排序,而Comparator接口不强制进行自 然排序,可以指定排序顺序。
4.面向接口案例分析
阅读Case-StudentDao.zip案例
4.1 画出类关系图,描述每个类与接口的作用。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
答:(1)
Studen类:用来创建对象.
StudentDao接口:抽象类,声明
public Student readStudent,public boolean writeStudent和public void diplayAllStudent三个抽象方法.StudentDaoArrayImpl类:
public StudentDaoArrayImpl(int size)创建一个长度为size的数组;public Student readStudent输入一个名字,若students数组中有学生的name与输入的名字相等,则返回该学生,否则返回null;public boolean writeStudent输入一个学生,若数组中某个元素为空,则把此学生加入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的全部学生.

(2)StudenDaoListImpl是以固定数组来存储学生,数量有限制。
StudentDaoArrayImp是以可变数组来存储学生,数量不限。
5.什么是面向接口编程?面向接口编程的好处是什么?
答:面向接口编程:面向接口编程就是将方法的声明与实现分开,创建接口时只需声明方法而不具体定义该方法的实现,具体的实现过程放在某个类中,类要实现接口。
面向接口编程的好处:在修改某个模块时,不必引起其他模块的大改动。
题目四中Test.java文件,定义一个StudentDao接口,对学生信息进行写入,读取,显示等操作,只需在接口声明抽象方法,不需定义方法的实现(如StudentDao接口下的三个抽象方法),具体的实现过程放在某个类中。例如StudentDaoArrayImpl类是将学生信息存入数组中,但是一开始就让我们定下数组长度,若长度不足则要重新定义数组长度重新输入数据,因而有局限性。此时我们并不需要修改StudentDaoArrayImpl类中的代码,只需要重新写一个StudenDaoListImpl类,在main调用StudentDao接口的抽象方法,就不用改动现有代码。
3. 码云上代码提交记录及PTA实验总结

3.2.实验总结
第一题的compareTo方法的具体实现:在比较名字时我本来是写了多个if(>0,<0,==0),每个if返回一个值x(=-1,=1,=0),这样比较麻烦。后来修改为x=this.name.compareTo(o.name);这样直接返回x的值,减少代码量。
201521123025<java程序设计>第五周学习总结的更多相关文章
- Java程序设计第五周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...
- 201521123025<<java程序设计>>第4周学习总结
Q1. 本周学习总结 Q2.书面作业 1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 2.面向对象设计(大作业1,非常重要) 2.1 将在网上 ...
- 201521123025 <<java程序设计>>第3周学习总结
1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 201521123025<<java程序设计>>第9周学习总结
1. 本周学习总结 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何避免? 经常出现Array ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
随机推荐
- pentaho专题系列之kettle篇--kettle源码编译
最近看了一些kettle的文章,都是kettle7.0以前的,已经跟不上时代了.截止笔者写这篇文章的时候,github上面的已经是7.1.0.3了,而且是发行版的,最新的快照版本已经是8.0的了.基于 ...
- UIKit View PG
View Program iOS View and Window Architecture The view draw cycle When a view first appears on the s ...
- 运营商级NAT(Carrier-grade NAT)
运营商级NAT(Carrier-grade NAT) 运营商级(Carrier-grade)NAT,是用于缓解是IPV4地址枯竭的一种方法,通过这种方法,原来被分配公网ip的端点.家庭网络等可以被 ...
- SDWebImage4.0.0 源码解析
在开发iOS的客户端应用时,经常需要从服务器下载图片,虽然系统提供了下载工具:NSData.NSURLSession等等方法,但是考虑到图片下载过程中,需要考虑的因素比较多,比如:异步下载.图片缓存. ...
- SpringMVC注解@RequestMapping之produces属性导致的406错误
废话不多说,各位,直接看图说话,敢吗?这个问题网上解决的办法写的狠是粗糙,甚至说这次我干掉它完全是靠巧合,但是也不否认网上针对406错误给出的解决方式,可能是多种情况下出现的406吧?我这次的流程就是 ...
- C++引用的作用
引入 C语言中函数有两种传参的方式: 传值和传址.以传值方式, 在函数调用过程中会生成一份临时变量用形参代替, 最终把实参的值传递给新分配的临时变量即形参. 它的优点是避免了函数调用的副作用, 确无法 ...
- 第9天:CSS精灵图
今天重点学习了CSS精灵图. "CSS精灵",英语css sprite,所以也叫做"CSS雪碧"技术.是一种CSS图像合并技术,该方法是将小图标和背景图像合并到 ...
- axios.js
Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...
- Spring详解(一)------概述
本系列教程我们将对 Spring 进行详解的介绍,相信你在看完后一定能够有所收获. 1.什么是 Spring ? Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开 ...
- GHO2VMDK转换工具分享含VS2010源码
平常经常用到虚拟机,每次从gho转换为vmdk时都要输入cmd代码,觉得麻烦,自己动手做了个gho2vmdk转换工具,集成ghost32.exe文件,可以一键转换,省时省事.运行时会将ghost32. ...