Java编程那些事儿62——担任
副标题#e#
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)。
要领包围在实际中保持了类的布局的统一,在实际利用时将极大的利便措施开拓人员的利用,使项目标整体布局保持统一,便于项目标维护。
在利用子类的工具时,子类内部的要领将包围从父类担任过来的要领,也就是说子类的工具挪用的是子类的成果要领,而不是父类的要领。
在举办要领包围时,子类内部的要领和父类的要领声明沟通,并且子类要领的限制不能比父类的要领严格。譬喻不能利用比父类限制更大的会见节制符或抛出比父类更多的异常等,这个在实际利用要领包围时需要出格的留意。
在实际的项目中大量的存在需要在子类内部重写父类的成果要领的处所,得当的利用要领包围将为项目开拓带来很大的便利。
#p#副标题#e#
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、自下而上的设计
在实际设计时,首先不思量类的干系,每个类都分隔设计,然后从相关的类中把反复的属性和要领抽象出来形成父类。
#p#分页标题#e#
对付初学者来说,第二种设计方法相对来说较量容易实现,所以一般初学者都凭据第二种设计方法举办设计,设计完成今后再实现成详细的代码。