AS3 是没有抽象类的,如果非要用抽象类的话,可以模拟出抽象类的特性。黑羽在编程之路中已经有了很好的解决方案,我在这里贴出来,给自己,也给需要的人指指路。
以下是三个重要的类的源码:
package com.mimswright.errors
{
/**
* An error class used to ensure the correct behavior of asbsract classes.
*
* @author Mims Wright
*/
public class AbstractError extends Error
{
/**
* Use this error in the constructor for your abstract class.
*/
public static const CONSTRUCTOR_ERROR:String="ERROR: An abstract class may not be instantiated.";
/**
* Use this error in abstract methods that should be overridden in your abstract class.
*/
public static const METHOD_ERROR:String="ERROR: Failed to implement an abstract method.";
public function AbstractError(message:String="", id:int=0)
{
super(message, id);
}
}
}
package com.mimswright.utils
{
import flash.utils.*;
/**
* Checks the class of <code>instance</code> against the <code>compareClass</code> for strict
* equality. If the classes are exactly the same, returns true. If
* the classes are different even if the <code>instance</code>'s class is a subclass
* of <code>compareClass</code>, it returns false.
* Does not work with interfaces. The compareClass must be a class.
*
* @author Mims Wright
*
* @example <listing version="3.0">
* var myBase:BaseClass = new BaseClass();
* var mySub:SubClass = new SubClass();
* trace(strictIs(myBase, BaseClass)); // true
* trace(strictIs(mySub, SubClass)); // true
* trace(strictIs(mySub, BaseClass)); // false
* </listing>
*
* @param instance - the object whos class you want to check.
* @param compareClass - the class to compare your object against.
* @return true if instance is strictly of type compareClass.
*/
public function strictIs(instance:Object, compareClass:Class):Boolean
{
var instanceClass:Class=Class(getDefinitionByName(getQualifiedClassName(instance)));
return instanceClass == compareClass;
}
}
package com.mimswright.utils
{
import com.mimswright.utils.strictIs;
import com.mimswright.errors.AbstractError;
public class AbstractEnforcer
{
public static function enforceConstructor(instance:Object, className:Class):void
{
if (strictIs(instance, className))
{
throw(new AbstractError(AbstractError.CONSTRUCTOR_ERROR));
}
}
public static function enforceMethod():void
{
throw(new AbstractError(AbstractError.METHOD_ERROR));
}
}
}
应用:
package org.kingda.book.basicoop.abstractclassandinterface
{
import com.mimswright.utils.AbstractEnforcer;
public class AbstractFoo
{
//抽象类的构造函数
public function AbstractFoo() {
AbstractEnforcer.enforceConstructor(this, AbstractFoo);
//trace ("ok");
}
//抽象方法
public function hello():void {
AbstractEnforcer.enforceMethod();
//trace ("hello()");
}
}
}
分享到:
相关推荐
这个"AS3.0类 flash 抽象类工具包"是一个专为AS3.0开发者设计的实用工具集合,尤其对新手极其友好。它包含了一些精心设计的抽象类,这些抽象类可以简化开发过程,提高代码的可复用性和可维护性。 抽象类在面向对象...
3. **不可实例化**:抽象类不能直接实例化,必须通过继承并实现抽象方法才能使用。 4. **状态管理**:抽象类可以拥有实例变量,因此可以维护状态信息。 5. **单一继承**:一个类只能继承一个抽象类,但同时可以实现...
在AS3中,3D对象通常由一系列的顶点、纹理坐标和法线向量定义,这些数据通过几何体类如Sprite3D或Shape3D进行表示。然后,开发者可以使用Matrix3D类来处理3D变换,包括平移、旋转和缩放。例如,通过改变Matrix3D的...
这些工具利用AS3SWF库的能力,提供了更高级别的抽象和便利功能,使开发过程更为高效。 **7. 开源与社区** AS3SWF库是开源的,这意味着开发者可以自由地查看和修改源代码,以满足特定需求或贡献改进。同时,有一个...
- **接口与抽象类**:掌握接口和抽象类的概念可以帮助开发者更好地组织代码,实现模块化设计。 - **异常处理**:学习如何使用try-catch-finally语句来捕获和处理运行时可能出现的异常情况,提高程序的健壮性。 ####...
在AS3中,接口和抽象类是实现多态的方式。接口定义了一组方法,但不提供具体实现,而抽象类可以包含部分实现。 5. 构造函数:每个类都有一个构造函数,它在创建新对象时自动执行,用于初始化对象的属性。AS3中的...
AS3缓动类GreenSock AS3 Tween是一款在ActionScript 3.0中广泛使用的动画库,主要用于创建平滑、复杂的过渡效果。GreenSock Animation Platform (GSAP) 是这个库的核心,它提供了强大的Tween(缓动)功能,允许...
尽管抽象类也能提供类似接口的功能,但在AS3中,一个类只能继承一个抽象类。相比之下,一个类可以实现多个接口,这使得接口成为了一种更为灵活的选择。此外,接口还允许我们更自然地实现多态性,从而提高了代码的...
AS3中,可以通过接口和抽象类实现工厂方法。 3. 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在AS3中,可以使用接口和类组合实现。 4. 建造者模式...
**AS3设计模式** 在软件开发领域,设计模式是一种经过时间考验的最佳实践,它解决了常见的编程问题并提供了可重用的解决方案。ActionScript 3.0(简称AS3)是Adobe Flash平台的主要编程语言,广泛用于创建交互式...
AS3粒子系统是一种基于ActionScript 3(AS3)编程语言的高级图形技术,用于创建动态的、视觉吸引人的效果,如火焰、烟雾、下雪等自然现象,以及各种抽象的视觉特效。这个粒子系统提供了强大的功能,使得开发者能够...
**Tweener缓动类(AS3)详解** 在Flash平台的开发中,动画效果的实现是不可或缺的一部分,而Tweener就是一种强大的ActionScript3(AS3)库,专门用于创建平滑的缓动(tweening)效果。Tweener通过简单的API,为开发者...
AS3解析器可能使用了词法分析和语法分析技术,如词法分析器(Scanner或Lexer)将源代码分解为令牌流,语法分析器(Parser)则根据预定义的语法规则将令牌流转化为抽象语法树(AST)。这样的解析器可能被用于编译器、...
- AS3 支持更多的面向对象特性,如接口和抽象类等,这些特性有助于构建更复杂的应用程序。 #### 三、可视元素(MovieClip, Button…)的转换 **1. 主要机制的变化** AS3 对 MovieClip 和 Button 等可视元素的处理...
在AS3中,Matrix类是一个核心的图形变换类,它提供了对二维图形的旋转、缩放、平移和倾斜等操作。Matrix类的构造函数允许我们初始化一个包含六个参数的矩阵,这些参数决定了图形的变换效果。 1. 构造器参数详解: ...
通过定义一个抽象工厂类,然后让具体对象的类继承并实现这个抽象工厂,我们可以确保所有的对象都按照统一的规则创建。这样,`ObjectPool`类只需要知道如何调用工厂方法,而无需了解对象的具体类型,增加了代码的可...
**高级主题** 涉及更复杂的 OOP 概念,如抽象类、接口实现等,帮助开发者深入理解 AS3 的高级特性。 **示例**:“GeometricShapes”案例研究,通过具体例子展示如何利用 AS3 实现面向对象编程的最佳实践。 综上所...
为了提高代码的可维护性和重用性,可以考虑将菜单类设计为更抽象的组件,支持多种布局方式(如水平、垂直)和主题样式。此外,还可以考虑菜单的国际化和动态加载数据。 总结,通过ActionScript 3.0的面向对象特性,...
* Interface:是 AS3 中的一种抽象类,定义了一个对象的行为和方法。 * Superclass:是 AS3 中的一个基类,定义了一个对象的基本结构和行为。 * Package:是 AS3 中的一个命名空间,用于组织和管理类和接口。 III. ...