20145314郑凯杰 《Java程序设计》第4周学习总结
所有代码已上传:
教材学习内容总结
①继承
设计程序中,因们需要设计多个模块,我想到了李晓东以前教我们的三个字“模块化”。
在JAVA中,我们用父类和子类进行模块的设计,对于一个整体程序,我们需要在一个项目中建立不同的文件,用关键字extends进行相互地继承,达到模块化的效果。
下面直接引用书上的例子,首先有Role.java(见托管)。我们再用剑士和马猴师来对其进行继承:
这里只给上剑士的继承代码:
public class SwordsMan extends Role{
public void fight(){
System.out.println("挥剑攻击");
}
}//SwordsmMan.java
¥¥¥:“is-a关系”
检查语法逻辑是否正确的方法是:看等号的右边类是不是左边类的子类
直接使用书上的例子来示范:
Role role1=new SwordsMan();Role role2=new Magician();
答案是可以的,为什么呢,因为SwordsMan是一种Role。满足我们的判断条件,所以很显然的这个程序能编译通过。接下来我们用第一个PRG GAME来跑一下以上两个知识点:
运行结果2:
②多态
从定义上看:使用单一接口操作多种类型的对象。
这种说法比较抽象,实际上就是一个问题的多种方面:
通过程序来分析 RPG1.java
运行结果3:
注意看程序中,我们用的方法不同于前面的重载的方式,为不同角色写不同的方法。而是使用了多态,全部继承role,事半功倍。
③重新定义行为
定义:子类在继承父类之后,定义与父类中相同的方法部署,但执行内容不同。
简单地说,就是操作接口相同,操作内容不同。
RPG2(在增强了Role的功能之后,才可以使用跑动RPG2):
运行结果4:
④继承语法
1、protected 的使用:被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。
对Role优化:
运行结果5:
2、super 关键字的使用:
如果想取得父类中的方法定义,可以在调用方法前,加上super关键字,使用super关键字调用的父类方法,不能定义为private。
通过Role的再一次优化,来练习一下这个语法:
这里用Role3。
运行结果6:
3、java.lang.Object
在Java中,最上层的父类就是java.lang.Object。
P178的例子:
运行结果7:
4、再看抽象类
这里用一个Guess的例子,可以将此程序分为GuessGame.java、ConsoleGame.java和Guess.java三个部分,来运行:
运行结果8:
哈哈 这次运气好 一次就猜中了:
到此,第六章就结束了//下面开始第七章:
①接口
跟“游泳”这个行为可以被所有东西拥有一样,有些东西不是某种东西的专属时,我们就可以用“定义行为”。
¥¥¥:interface
以Swimmer接口为例,进行定义行为:
public interface Swimmer{
public abstract void swim();
}//Swimmer.java
接下来Fish拥有Swimmer
行为,我们用到implements
关键字。需要注意的是,接口中的方法不能操作,直接标示为abstract,而且一定是public。
运行结果9(编译):
我们海洋世界1就完结了,主要是认识了implements的关键字,接下来要练习海洋世界2:
通过对海洋世界1中物种的扩充,加入了小丑鱼和鲨鱼。我们就可以直接引用来输出会游泳的物种:
运行结果10:
接下来海洋世界3(加入了海空世界):
从定义接口开始:
public interface Flyer{
public abstract void fly();
}//Flyer.java OceanWorld3
之后定义了飞机、飞鱼,进行海空世界的运行:
运行结果11:
注意:书上P202的海面飞行器有问题,应该将上面的AIRPLANE改为SEAPLANE,否则通不过编译,后面的海空世界也会出现问题。
接下来的海洋世界无非是进一步练习,这边就不给演示结果了。直接进入下一个知识点。
②接口语法
1、interface用来定义抽象的行为外观,方法要声明为public abstract
Game例子:
运行结果12:
2、匿名内部类:
开发多人联机程序时,我们需要用到继承某个类或操作某个借口并建立实例。我们使用匿名内部类来解决:
第一步、是客户Client的定义和用户信息的定义
第二步、再定义用户接口ClientListener
第三步、收集联机之后的Client对象,这里用曾经学过的“java.util.ArrayList”来收集
(详情见托管代码Interface部分)
运行结果13:
学习内容总结完毕
学习过程中遇到的问题和解决过程
一、在学习过程中我遇到了这样一个令人匪夷所思的情况;
遇到问题1:
注意看“3个问题”正上方,编译程序指向了public class ···中的 public的字母“P”。为什么一个字母会出现错误,然而我检查过了,public的拼写一点都没有问题。
经过百度,我终于找到了答案:
原来是我从Eclipse中把代码复制到记事本中时,首字符丢失,这种字符只有计算机可以识别显示在记事本中是没法看到的。所以出现了问题。
二、方法不会覆盖和实现超现实的方法
在练习书上的范例时,P202的海空飞行器时,我遇到了这样的问题
问题2:
错误“方法不会覆盖和实现超现实的方法”
我的代码是:
冷静想想之后,我发现了问题出在我给了飞机两个功能,而implements却只给了一个功能:
解决2:
问题便被解决了。
代码调试中的问题和解决过程
一、书中出现的问题:
P202上,程序的文件名是Airplane,但在程序里却定义的是Seaplane。这样连编译都通不过吧···要是改动了下面的Seaplane的话,后面的Ocean.java也会出现问题。所以是书上的程序名出现了问题。
图1:
二、多人联机程序出现的问题
遇到问题3:
这个问题因为只出现了小提示,对程序最终的结果并没有任何影响,详细原因还在分析中。
其他(感悟、思考等,可选)
本周的学习任务循序渐进,而且是通过游戏和有趣实例的方式让我们进行学习。我从中深刻的感受到了游戏化学习的乐趣。
只需要一些简单的“剑士”、“魔法师”,就比枯燥的成绩统计之类的例子有趣多了。我也学的很快,我正好在大创项目上准备研究这样一个“游戏化学习”的软件。因此对本周的课程详细研究了一下,这肯定也将对我们小组的项目有很大帮助。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 50/50 | 1/2 | 20/20 | |
第二周 | 700/600 | 1/4 | 38/38 | |
第三周 | 900/1100 | 1/7 | 60/60 | |
第四周 | 800/1350 | 1/9 | 90/90 |
参考资料
- Java学习笔记(第8版)
- 《Java学习笔记(第8版)》学习指导
以上是 20145314郑凯杰 《Java程序设计》第4周学习总结 的全部内容, 来源链接: utcz.com/z/393006.html