20145314郑凯杰 《Java程序设计》第4周学习总结

java

所有代码已上传:

教材学习内容总结

①继承

设计程序中,因们需要设计多个模块,我想到了李晓东以前教我们的三个字“模块化”。

在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/501/220/20
第二周700/6001/438/38
第三周900/11001/760/60
第四周800/13501/990/90

参考资料

  • Java学习笔记(第8版)
  • 《Java学习笔记(第8版)》学习指导

以上是 20145314郑凯杰 《Java程序设计》第4周学习总结 的全部内容, 来源链接: utcz.com/z/393006.html

回到顶部