抽象类
1)抽象方法:只有方法名和参数列表,没有方法体。
用于描述抽象的功能,多用于功能设计。定义软件之间约定的功能
eg:
Timer类约定,在适合时候调用TimerTask的抽象方法run()。
使用Timer只需要实现run方法就可以实现定时任务。叫做Timer定时地“回调”run方法实现
定时任务
2)一般把包含抽象方法的类定义为抽象类
3)可以定义变量不能直接实例化。
4)只能被继承,具体类继承抽象类时必须实现全部的抽象方法
接口
1)相当于所有方法都是抽象方法,所有属性都是常量的抽象类
2)接口中只能声明常量和抽象方法
3)可以使用接口定义变量,可以引用具体类的实例
4)接口不能直接实例化
5)具体类实现接口必须实现全部的抽象方法:接口约定了具体类的方法,约定了类的外部行为。
6)接口可以集成接口
7)类可以实现多个接口,接口和实现类是父子类型关系。
内部类
1)定义在内部的类:用于在外部类中封装类的定义
2)内部类可以共享外部类的属性和方法。
eg:
定时器任务的实现,经常采用内部类实现。
匿名内部类(匿名类)
1)语法非常简洁:new ClassName(构造器参数列表){方法体}
2)匿名类容易与创建对象混淆,这里需要注意。
3)匿名类是集成父类型并同时实例化为子类对象,没有子类类名。
4)匿名类可以继承一般类,抽象类,也可以实现接口。
1)抽象方法:只有方法名和参数列表,没有方法体。
用于描述抽象的功能,多用于功能设计。定义软件之间约定的功能
eg:
Timer类约定,在适合时候调用TimerTask的抽象方法run()。
使用Timer只需要实现run方法就可以实现定时任务。叫做Timer定时地“回调”run方法实现
定时任务
2)一般把包含抽象方法的类定义为抽象类
3)可以定义变量不能直接实例化。
4)只能被继承,具体类继承抽象类时必须实现全部的抽象方法
接口
1)相当于所有方法都是抽象方法,所有属性都是常量的抽象类
2)接口中只能声明常量和抽象方法
3)可以使用接口定义变量,可以引用具体类的实例
4)接口不能直接实例化
5)具体类实现接口必须实现全部的抽象方法:接口约定了具体类的方法,约定了类的外部行为。
6)接口可以集成接口
7)类可以实现多个接口,接口和实现类是父子类型关系。
内部类
1)定义在内部的类:用于在外部类中封装类的定义
2)内部类可以共享外部类的属性和方法。
eg:
定时器任务的实现,经常采用内部类实现。
匿名内部类(匿名类)
1)语法非常简洁:new ClassName(构造器参数列表){方法体}
2)匿名类容易与创建对象混淆,这里需要注意。
3)匿名类是集成父类型并同时实例化为子类对象,没有子类类名。
4)匿名类可以继承一般类,抽象类,也可以实现接口。
继续贪吃蛇
Cell是数据格式,是数据结构
Worm是核心数据和算法的封装,包括爬行,碰撞,吃食物等
TestCase是核心业务数据的测试案例,必须严格实现通过
WormStage:是蛇的绘制面板,嗨充当了软件业务流程控制。控制了定时任务处理和键盘输入
流程控制creepTo
JFrame只是窗口逻辑。将WormStage显示出来
其它知识点:
(1)接口可以实现软件组件之间的插接组装关系。
(2)因为匿名类语法简洁,工作中非常常用,书写时要注意括号配对情况。
(3)打印一个数组一定要用Arrays.toString()函数进行转换,否打印出的是数组的地址。
当类1的元素包含数组时,在类1中重写了toString方法,类1的实例化对象作为类2的成员变量,类2
中重写toString方法,只需要在类1的对象前加上 ""+ 即可以字符串的形式显示。
(4)想不通时,就把东西画在纸上,动手看看,能够比较清楚地想到。
Cell是数据格式,是数据结构
Worm是核心数据和算法的封装,包括爬行,碰撞,吃食物等
TestCase是核心业务数据的测试案例,必须严格实现通过
WormStage:是蛇的绘制面板,嗨充当了软件业务流程控制。控制了定时任务处理和键盘输入
流程控制creepTo
JFrame只是窗口逻辑。将WormStage显示出来
其它知识点:
(1)接口可以实现软件组件之间的插接组装关系。
(2)因为匿名类语法简洁,工作中非常常用,书写时要注意括号配对情况。
(3)打印一个数组一定要用Arrays.toString()函数进行转换,否打印出的是数组的地址。
当类1的元素包含数组时,在类1中重写了toString方法,类1的实例化对象作为类2的成员变量,类2
中重写toString方法,只需要在类1的对象前加上 ""+ 即可以字符串的形式显示。
(4)想不通时,就把东西画在纸上,动手看看,能够比较清楚地想到。
贪吃蛇总结:
自己写贪吃蛇时出的问题:
(1) 在边界时还没到最后一步就直接死掉了。
现象:自动爬行时,可以观察到蛇能够到达边界,但是此时按方向键没有效果。
原因:键盘响应的撞击检测中没有实时更新键盘新输入的方法,造成键盘事件已经触发,但还是按照之前的方向
去检测撞击,导致在边界时无法控制。
(2) 撞击检测在x和y轴远离轴线的舞台边沿范围取错,应该取>=COLS,取成了>COLS
(3) 撞击检测中没有添加反方向判断。
原因:只关注到了边沿和吃自己,没有关注到反方向
现象:自动爬行时,可以观察到蛇能够到达边界,但是此时按方向键没有效果。
原因:键盘响应的撞击检测中没有实时更新键盘新输入的方法,造成键盘事件已经触发,但还是按照之前的方向
去检测撞击,导致在边界时无法控制。
(2) 撞击检测在x和y轴远离轴线的舞台边沿范围取错,应该取>=COLS,取成了>COLS
(3) 撞击检测中没有添加反方向判断。
原因:只关注到了边沿和吃自己,没有关注到反方向
总结:在进行软件测试时,一定要将所有情况都测试一遍,不然出现上面的错误很难发现。