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 ...
随机推荐
- 浅谈JS中的高级函数
在JavaScript中,函数的功能十分强大.它们是第一类对象,也可以作为另一个对象的方法,还可以作为参数传入另一个函数,不仅如此,还能被一个函数返回!可以说,在JS中,函数无处不在,无所不能,堪比孙 ...
- C++中加const与不加const的区别
“常量”与“只读变量”的区别. 常量肯定是只读的,例如5, "abc",等,肯定是只读的,因为常量是被编译器放在内存中的只读区域,当然也就不能够去修改它. “只读变量”则是在内存中 ...
- nopCommerce安装教程
nopCommerce是一个通用的电子商务平台,适合每个商家的需要:它强大的企业和小型企业网站遍布世界各地的公司销售实体和数字商品.nopCommerce是一个透明且结构良好的解决方案,它结合了开源和 ...
- Linux命令的学习
mkdir -p 创建目录 (make directorys) p递归创建 ls -l(long)d(direcitory)显示目录或者文件 cd 切换目录 从"/"开始目录,/ ...
- JMeter之Throughput Controller详解(实验)
Throughput Contoller,直译是吞吐量控制器,它是用来控制该控制器下面元件的执行次数,与控制吞吐量的功能无关.(注:用Constant Throughput Timer可以控制吞吐量. ...
- async简单使用
node的异步io虽然好用,但是控制异步流程确实一个比较麻烦的事情,比如在爬虫中控制并发数量,避免并发过大导致网站宕机或被加入黑名单.因此需要一个工具来控制并发,这个工具可以自己写或者使用async( ...
- 在fetch方法中添加header后遇到的预检请求问题
今天在使用fetch方法 fetch('xxx.com',{header:{bbbbbbb:111}}) 浏览器返回的请求信息中,header变成了 :authority:koss.nocorp.me ...
- The Karting 2017ccpc网络赛 1008
The Karting championship will be held on a straight road. There are N keypoints on the road. The pat ...
- python+selenium自动化软件测试(第1章):环境搭建,你也可以直接用Anaconda!
1.1 环境搭建 1.1.1 selenium简介Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架.它是一款用于运行端到端功能测试的超强工具.您可以使用多个编程语言编写测试 ...
- 第一篇--认识Jmeter
Jmeter是Apache组织开发的基于Java的压力测试工具,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试静态和动态资源,例如静态文件.Java 小服务程序.CGI 脚 ...