`

Java编程那些事儿62——继承(二)

阅读更多

Java编程那些事儿62——继承()

郑州游戏学院 陈跃峰

出自:http://blog.csdn.net/mailbomb

8.5.2.3 方法覆盖

前面介绍了继承的一些基础知识,现在介绍一些在使用继承时需要注意的问题。熟悉这些问题将更好的解决项目中的实际问题。

例如在实际的游戏中,会按照怪物的种类实现设计。首先设计一个基础类Monster,然后按照怪物类别设计Monster的子类,如BossNormalMonster等。则在实际实现时,每个怪物都有移动(move)的功能,但是在BossNormalMonster的移动规则存在不同。这样就需要在子类的内部重新编写移动的功能,从而满足实际的移动要求。该示例的实现代码如下:

//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类的属性,则DoorHouse类之间的关系就是使用关系,House使用Door类来制作自身。

使用关系提供了使用已有类来声明新类的方式,可以以组合的方式来构建更复杂的类,这是项目中使用类的常见方式之一。

判断是否是使用关系的依据就是:has-a,一个类具备另外一个类的对象,例如一个House有一个门。

3、 继承关系(is-a)

如果一个类是另外一个类的一种,也就是在分类上存在包含关系,则应该使用继承来实现。例如Boss是怪物的一种,则使Boss继承Monster类。

下面简单介绍一些项目中继承的设计方法。在实际设计继承时,一般有两种设计的方法:

1、 自上而下的设计

在实际设计时,考虑类的体系结构,先设计父类,然后根据需要来增加子类,并在子类的内部实现或添加对应的方法。

2、 自下而上的设计

在实际设计时,首先不考虑类的关系,每个类都分开设计,然后从相关的类中把重复的属性和方法抽象出来形成父类。

对于初学者来说,第二种设计方式相对来说比较容易实现,所以一般初学者都按照第二种设计方式进行设计,设计完成以后再实现成具体的代码。

分享到:
评论

相关推荐

    做坦克游戏,学Java编程(二)——创建坦克类并实现BadTank.pdf

    做坦克游戏,学Java编程(二)——创建坦克类并实现BadTank.pdf

    做坦克游戏,学Java编程(三)——实现GoodTank类.pdf

    做坦克游戏,学Java编程(三)——实现GoodTank类.pdf

    做坦克游戏,学Java编程(四)——添加炮弹类.pdf

    做坦克游戏,学Java编程(四)——添加炮弹类.pdf

    学习JAVA编程,完成作业——编一个控制台梭哈游戏.zip

    在本项目中,"学习JAVA编程,完成作业——编一个控制台梭哈游戏.zip",开发者采用Java语言创建了一个基于控制台的梭哈(Poker)游戏。这是一款非常适合初学者进行实践和学习的项目,它涵盖了Java编程基础、面向对象...

    做坦克游戏,学Java编程(一)——画出游戏窗口和坦克.pdf

    做坦克游戏,学Java编程(一)——画出游戏窗口和坦克.pdf

    java课程设计大作业-GUI编程,基于Java实现的俄罗斯方块小游戏

    java课程设计大作业——GUI编程,基于Java实现的俄罗斯方块小游戏java课程设计大作业——GUI编程,基于Java实现的俄罗斯方块小游戏java课程设计大作业——GUI编程,基于Java实现的俄罗斯方块小游戏java课程设计大...

    java8函数式编程(csdn)————程序.pdf

    Java 8 函数式编程 Java 8 函数式编程是指在 Java 8 中引入的一种新的编程范式,它强加了额外的约束,即所有数据必须是不可变的,设置一次,永不改变。函数式编程将值传递给函数,该函数然后生成新值但从不修改...

    Java全能学习面试手册——互联网企业面试真题.zip

    Java全能学习面试手册——互联网企业面试真题.zip 01 java面试——北京-百度-Java中级.pdf 02 java面试——北京-京东-Java中级.pdf 03 java面试——广州-唯品会-Java大数据开发工程师.pdf 04 java面试——杭州-阿里...

    JAVA学习笔记————————

    2. **面向对象编程**:JAVA是纯面向对象的语言,因此学习笔记中会详细讲解类的创建、继承、封装、多态等概念。同时,接口、抽象类以及访问修饰符也是重要的知识点。 3. **异常处理**:JAVA提供了一种结构化的异常...

    JAVA编程题全集(100题及答案)——直接打印

    3. JAVA面向对象编程:资源中提到了面向对象编程的基本概念,如类、对象、继承、多态等。例如,资源中提供了一个圆类 `Circle`,该类拥有成员变量 `Radius` 和成员方法 `getArea`、`getPerimeter` 等,展示了如何...

    阿里巴巴 Java编程规范手册

    阿里巴巴 Java 编程规范 开发手册——关注程序人生,获得无限福利 阿里巴巴 Java 编程规范 开发手册——关注程序人生,获得无限福利 阿里巴巴 Java 编程规范 开发手册——关注程序人生,获得无限福利

    java程序设计大作业-雷电飞机射击游戏(Java)

    java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大作业——雷电飞机射击游戏(Java)java程序设计大...

    Java JDK 6学习笔记——ppt简体版.rar

    这份"Java JDK 6学习笔记——ppt简体版"提供了关于这个关键版本的详细教程,适合初学者和有一定经验的开发者来深入理解Java编程。 首先,我们要了解Java JDK是什么。Java Development Kit,简称JDK,是Oracle公司...

    《Java 工程师的编程逻辑》——用 java 看计算机世界

    《Java工程师的编程逻辑》是一本深度探讨Java编程思想和技术的书籍,旨在帮助读者通过Java语言洞察计算机世界的奥秘。本书不仅涵盖了Java的基础知识,还深入讲解了编程逻辑和设计原则,是Java初学者和进阶者提升技能...

    JAVA程序与PLC通信——学习使用

    本篇将详细探讨"JAVA程序与PLC通信——学习使用"这一主题,包括如何使用Java实现与西门子PLC的串口通信,以及如何收发数据。 首先,我们要理解Java语言的优势。Java作为一种跨平台的编程语言,其强大的网络支持和...

    java毕业设计——文本编辑器.zip

    java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计——文本编辑器.zip java毕业设计...

    Java练手小项目——多线程聊天室.zip

    【Java练手小项目——多线程...通过这个“Java练手小项目——多线程聊天室”,你可以深入了解Java多线程的原理和实践,同时学习到网络编程和并发集合的运用,这对于提升你的Java编程技能和解决实际问题的能力大有裨益。

    Java全能学习面试手册——阿里开发手册全套.zip

    Java全能学习面试手册——阿里开发手册全套.zip 01 阿里巴巴Java开发手册1.0.0(公开版).pdf 02 阿里巴巴Java开发手册1.1.0(正式版).pdf 03 阿里巴巴Java开发手册1.2.0(升级版).pdf 04 阿里巴巴Java开发手册...

    JAVA编程课件 Ch05-继承

    本章节主要讲解了Java编程中的一个重要概念——**继承**。继承是面向对象编程(OOP)中的四大基本特性之一,它允许创建一个新的类(子类)来继承现有的类(父类)的所有属性和方法,并在此基础上扩展新的功能。通过...

Global site tag (gtag.js) - Google Analytics