- 浏览: 312410 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
opalescent_:
学习了。。
java笔试题的整理和解答扩展(String专题) -
yixiao258964:
谢谢,找了好久Reverse Enginee,都说在datab ...
PowerDesigner Reverse Engineer from database-mysql -
javaAlpha:
介绍的真全啊
Java编程那些事儿86——文件操作之File类使用
Java编程那些事儿62——继承(二)
郑州游戏学院 陈跃峰
出自:http://blog.csdn.net/mailbomb
8.5.2.3 方法覆盖
前面介绍了继承的一些基础知识,现在介绍一些在使用继承时需要注意的问题。熟悉这些问题将更好的解决项目中的实际问题。
例如在实际的游戏中,会按照怪物的种类实现设计。首先设计一个基础类Monster,然后按照怪物类别设计Monster的子类,如Boss、NormalMonster等。则在实际实现时,每个怪物都有移动(move)的功能,但是在Boss和NormalMonster的移动规则存在不同。这样就需要在子类的内部重新编写移动的功能,从而满足实际的移动要求。该示例的实现代码如下:
//Monster.java
public class Monster{
public void move(){
//移动功能
}
}
//Boss.java
public class Boss extends Monster{
public void move(){
//Boss类的移动规则
}
}
//NormalMonster.java
public class NormalMonster extends Monster{
public void move(){
// NormalMonster类的移动规则
}
}
这样在Monster的每个子类内部都重新书写了move方法的功能,这种在子类内部重新父类中的方法的语法现象,称作方法覆盖(override)。
方法覆盖在实际中保持了类的结构的统一,在实际使用时将极大的方便程序开发人员的使用,使项目的整体结构保持统一,便于项目的维护。
在使用子类的对象时,子类内部的方法将覆盖从父类继承过来的方法,也就是说子类的对象调用的是子类的功能方法,而不是父类的方法。
在进行方法覆盖时,子类内部的方法和父类的方法声明相同,而且子类方法的限制不能比父类的方法严格。例如不能使用比父类限制更大的访问控制符或抛出比父类更多的异常等,这个在实际使用方法覆盖时需要特别的注意。
在实际的项目中大量的存在需要在子类内部重写父类的功能方法的地方,恰当的使用方法覆盖将为项目开发带来很大的便利。
8.2.2.4 需要注意的问题
除了方法覆盖以外,在实际使用继承时还有很多需要注意的问题。下面就这些问题进行一一说明。
1、 属性覆盖没有必要
方法覆盖可以重写对应的功能,在实际继承时在语法上也支持属性覆盖(在子类内部声明和父类属性名相同的属性),但是在实际使用时修改属性的类型将导致类结构的混乱,所以在继承时不能使用属性覆盖。
2、 子类构造方法的书写
该项是继承时书写子类最需要注意的问题。在子类的构造方法内部必须调用父类的构造方法,为了方便程序员进行开发,如果在子类内部不书写调用父类构造方法的代码时,则子类构造方法将自动调用父类的默认构造方法。而如果父类不存在默认构造方法时,则必须在子类内部使用super关键字手动调用,关于super关键字的使用将在后续进行详细的介绍。
说明:子类构造方法的参数列表和父类构造方法的参数列表不必完全相同。
3、 子类的构造过程
在构造子类时由于需要父类的构造方法,所以实际构造子类的过程就显得比较复杂了。其实在实际执行时,子类的构造过程遵循:首先构造父类的结构,其次构造子类的结构,无论构造父类还是子类的结构,都是首先初始化属性,其次执行构造方法。则子类的构造过程具体如下:
如果类A是类B的父类,则类B的对象构造的顺序如下:
a) 类A的属性初始化
b) 类A的构造方法
c) 类B的属性
d) 类B的构造方法
由于任何一个类都直接或间接继承自Object类,所以Object类的属性和构造方法都是首先执行的。
4、 不要滥用继承
在实际的项目设计中,继承虽然很经常使用,但是还是不能滥用,使用继承的场合以及相关问题参看下面的说明。
8.5.2.5 如何设计继承
在实际的项目中,类和类之间的关系主要有三种:
1、 没有关系
项目中的两个类之间没有关联,不需要进行消息传递,则这两个类之间就没有关系,可以互相进行独立的设计。
2、 使用关系(has-a)
如果一个类的对象是另外一个类的属性,则这两个类之间的关系是使用关系。例如把房屋(House)看作是一个类,把门(Door)看成另外一个类,则房屋有一个门,代码的实现如下:
//House.java
public class House{
public Door door;
}
//Door.java
public class Door{
}
则这里Door的对象是House类的属性,则Door和House类之间的关系就是使用关系,House使用Door类来制作自身。
使用关系提供了使用已有类来声明新类的方式,可以以组合的方式来构建更复杂的类,这是项目中使用类的常见方式之一。
判断是否是使用关系的依据就是:has-a,一个类具备另外一个类的对象,例如一个House有一个门。
3、 继承关系(is-a)
如果一个类是另外一个类的一种,也就是在分类上存在包含关系,则应该使用继承来实现。例如Boss是怪物的一种,则使Boss继承Monster类。
下面简单介绍一些项目中继承的设计方法。在实际设计继承时,一般有两种设计的方法:
1、 自上而下的设计
在实际设计时,考虑类的体系结构,先设计父类,然后根据需要来增加子类,并在子类的内部实现或添加对应的方法。
2、 自下而上的设计
在实际设计时,首先不考虑类的关系,每个类都分开设计,然后从相关的类中把重复的属性和方法抽象出来形成父类。
对于初学者来说,第二种设计方式相对来说比较容易实现,所以一般初学者都按照第二种设计方式进行设计,设计完成以后再实现成具体的代码。
发表评论
-
Java编程那些事儿37—for语句语法
2008-06-17 11:53 727Java编程那些事儿37—for语句语法 郑州游戏学院 陈跃 ... -
Java编程那些事儿38—break和continue语句
2008-06-18 15:01 779Java编程那些事儿38—break和continue语句 ... -
Java编程那些事儿39—流程控制综合示例1
2008-06-19 12:30 792Java编程那些事儿39—流程控制综合示例1 郑州游戏学院陈 ... -
Java编程那些事儿40—流程控制综合示例2
2008-06-19 20:23 887Java编程那些事儿40—流程控制综合示例2 郑州游戏学院陈 ... -
Java编程那些事儿41—流程控制综合示例3
2008-06-20 18:06 699<meta http-equiv="Conte ... -
Java编程那些事儿42—流程控制综合练习
2008-06-20 22:13 806Java编程那些事儿42—流程控制综合练习 郑州游戏学院 陈 ... -
Java编程那些事儿57—面向对象基础
2008-07-28 14:15 772Java编程那些事儿57—面向对象基础 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿58—类(一)
2008-07-29 11:05 709Java编程那些事儿58—类(一) 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿59——类(二)
2008-08-04 23:36 692Java编程那些事儿59——类(二) 郑州游戏学院 陈跃峰 ... -
Java编程那些事儿60——对象
2008-08-18 23:49 628Java编程那些事儿60—— ... -
Java编程那些事儿61—面向对象设计方法和面向对象特性(一)
2008-08-29 21:42 753Java编程那些事儿61—面向对象设计方法 郑州游戏学院 陈 ... -
Java编程那些事儿63—多态性
2008-09-27 10:31 746Java编程那些事儿63—多态性 郑州游戏学院 陈跃峰 出 ... -
Java编程那些事儿64——访问控制符、修饰符和其它关键字
2008-10-14 14:12 795<meta http-equiv="Conte ... -
Java编程那些事儿65——static修饰符
2008-10-23 15:46 821Java编程那些事儿65——static修饰符 郑州游戏学院 ... -
Java编程那些事儿66——final修饰符
2008-11-11 17:19 727Java编程那些事儿66——f ... -
Java编程那些事儿67——this和super
2008-11-12 12:25 965Java编程那些事儿67——this和super 陈跃峰 ... -
Java编程那些事儿68——抽象类和接口(一)
2008-12-22 11:31 751Java编程那些事儿68—— ... -
Java编程那些事儿69——抽象类和接口(二)
2008-12-27 16:25 978Java编程那些事儿69——抽象类和接口(二) 陈跃峰 ... -
Java编程那些事儿70——抽象类和接口(三)
2009-01-05 14:20 1189Java编程那些事儿70—— ... -
Java编程那些事儿71——内部类简介
2009-01-06 09:32 771Java编程那些事儿71—— ...
相关推荐
更多资源详见: http://blog.csdn.net/fanxiaobin577328725/article/details/51894331 (包含图书各部分和随书源码,还有其它资源的详细下载地址)
做坦克游戏,学Java编程(二)——创建坦克类并实现BadTank.pdf
做坦克游戏,学Java编程(三)——实现GoodTank类.pdf
做坦克游戏,学Java编程(四)——添加炮弹类.pdf
在本项目中,"学习JAVA编程,完成作业——编一个控制台梭哈游戏.zip",开发者采用Java语言创建了一个基于控制台的梭哈(Poker)游戏。这是一款非常适合初学者进行实践和学习的项目,它涵盖了Java编程基础、面向对象...
做坦克游戏,学Java编程(一)——画出游戏窗口和坦克.pdf
在标题“12.java学习第十二章——继承extends.pdf”以及描述“12.java学习第十二章——继承extends.pdf”中,明确指出了本章节的主要内容是关于Java语言中的继承概念。继承是面向对象编程中的一个重要特性,它允许...
java课程设计大作业——GUI编程,基于Java实现的俄罗斯方块小游戏java课程设计大作业——GUI编程,基于Java实现的俄罗斯方块小游戏java课程设计大作业——GUI编程,基于Java实现的俄罗斯方块小游戏java课程设计大...
Java编程经典——2010新版Java教程 内容详尽。。 适合大家学习
Java全能学习面试手册——互联网企业面试真题.zip 01 java面试——北京-百度-Java中级.pdf 02 java面试——北京-京东-Java中级.pdf 03 java面试——广州-唯品会-Java大数据开发工程师.pdf 04 java面试——杭州-阿里...
学习JAVA基础看他 很不错 相信你会喜欢的 这个是小弟自己做的 不好的地方请多多包含
java编程那些事儿-陈跃峰 不经意发现陈前辈的这本书,在网上没有找到归档的,于是,我自作多情地整理了一下,这样同志们在线下也能看这本书了。共分了三部分,这是第一部分,还有两部分,希望看这些文章的同志们一定...
3. JAVA面向对象编程:资源中提到了面向对象编程的基本概念,如类、对象、继承、多态等。例如,资源中提供了一个圆类 `Circle`,该类拥有成员变量 `Radius` 和成员方法 `getArea`、`getPerimeter` 等,展示了如何...
轻量级Java EE企业应用实战——Struts 2+Spring+Hibernate整合开发电子书123全套.part3.rar
【标题】"HNU编程新技术实务实验一——Java语言编程"揭示了这是一份与Java编程相关的学习资源,特别关注于湖南大学(HNU)的编程新技术实务课程中的实验项目。这个实验可能涵盖基础到进阶的Java编程概念,旨在帮助...
java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大...
这份名为"java软件工程师简历模板——应届生.rar"的压缩包文件,旨在为即将踏入职场的Java编程新手提供一份量身定制的简历指南。 在撰写Java软件工程师的简历时,有几个关键点需要注意: 1. **个人信息**:应包含...
《JAVA语言一月通——应用编程及网际通信》书中的一些源代码 分享下 希望大家喜欢
这本书《Java 3D编程实践——网络上的三维动画》显然会深入探讨如何利用Java 3D来实现网络环境中的动态3D场景。 Java 3D API是基于Java Foundation Classes (JFC) 的一部分,它为开发者提供了构建三维图形应用的...