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 ...
随机推荐
- Linux下SVN配置
1.安装svnyum install subversion 2.创建版本库fengyu(版本库的名字取来和你web项目的名字相同,否则你在服务器检出后会变成web项目里还有一层版本库的目录,里面才是项 ...
- Linux - 简明Shell编程02 - 变量(Variable)
脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash v1=test-variabl ...
- 谈一谈 Laravel 5.5 的 「自动发现」和此刻心情
看了Taylor Otwell发表的Package Auto-Discovery In Laravel 5.5第一反应是 为啥... 也怪我,在开发之前忘记看5.5的开发代码动态,之前的文章中也提到过 ...
- 17个新手常见Python运行时错误
当初学 Python 时,想要弄懂 Python 的错误信息的含义可能有点复杂.这里列出了常见的的一些让你程序 crash 的运行时错误. 1)忘记在 if , elif , else , for , ...
- WEB的进击之路-第一章 HTML基本标签(1)
一.HTML简介 超文本标记语言,标准通用标记语言下的一个应用. "超文本"就是指页面内可以包含图片.链接,甚至音乐.程序等非文字元素. 超文本标记语言的结构包括"头&q ...
- DVWA笔记之三:CSRF
CSRF与XSS不同,它称为跨站请求伪造,它是利用其他页面的恶意脚本来加载访问或操作存在CSRF的漏洞的可信网站. 1.Low级别 核心代码如下: <?php if( isset( $_GET ...
- awk 使用案例
1.输出占用率超过60%的分区 df -h | awk 'BEGIN{print "Full Partition"}NR>1{gsub("%"," ...
- VMware Workstation 12 Pro 之安装林耐斯优麒麟 X64-UI系统
VMware Workstation 12 Pro 之安装林耐斯优麒麟 X64-UI系统... ------------------------------- -------------------- ...
- Spring同mybatis整合讲义(事物)
1.mybatis的作用. 它是一个数据持久化的解决方案,它是一个ORM的框架. 2.Spring的作用? 备注:将本地jar包拷贝至本地的maven仓库里:oracle的jar包需自己发布到mave ...
- 又一流氓推广Microsoft Edge,我勒个去
最新的Windows10 的升级也是醉了,不得不吐槽一个非常流氓的浏览器推广:Microsoft Edge(这小婊砸). 为了将之前的历史包袱IE干掉,这次微软也是蛮拼的,直接把IE从电脑里干掉了,你 ...