`
luhantu
  • 浏览: 204513 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

AS3 抽象类

    博客分类:
  • AS3
 
阅读更多

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类 flash 抽象类工具包"是一个专为AS3.0开发者设计的实用工具集合,尤其对新手极其友好。它包含了一些精心设计的抽象类,这些抽象类可以简化开发过程,提高代码的可复用性和可维护性。 抽象类在面向对象...

    接口与抽象类

    3. **不可实例化**:抽象类不能直接实例化,必须通过继承并实现抽象方法才能使用。 4. **状态管理**:抽象类可以拥有实例变量,因此可以维护状态信息。 5. **单一继承**:一个类只能继承一个抽象类,但同时可以实现...

    3D效果的as3源码

    在AS3中,3D对象通常由一系列的顶点、纹理坐标和法线向量定义,这些数据通过几何体类如Sprite3D或Shape3D进行表示。然后,开发者可以使用Matrix3D类来处理3D变换,包括平移、旋转和缩放。例如,通过改变Matrix3D的...

    as3swf AS3库

    这些工具利用AS3SWF库的能力,提供了更高级别的抽象和便利功能,使开发过程更为高效。 **7. 开源与社区** AS3SWF库是开源的,这意味着开发者可以自由地查看和修改源代码,以满足特定需求或贡献改进。同时,有一个...

    as3中文学习文档

    - **接口与抽象类**:掌握接口和抽象类的概念可以帮助开发者更好地组织代码,实现模块化设计。 - **异常处理**:学习如何使用try-catch-finally语句来捕获和处理运行时可能出现的异常情况,提高程序的健壮性。 ####...

    as3 source code

    在AS3中,接口和抽象类是实现多态的方式。接口定义了一组方法,但不提供具体实现,而抽象类可以包含部分实现。 5. 构造函数:每个类都有一个构造函数,它在创建新对象时自动执行,用于初始化对象的属性。AS3中的...

    as3缓动类greensock-as3_Tween

    AS3缓动类GreenSock AS3 Tween是一款在ActionScript 3.0中广泛使用的动画库,主要用于创建平滑、复杂的过渡效果。GreenSock Animation Platform (GSAP) 是这个库的核心,它提供了强大的Tween(缓动)功能,允许...

    as3 接口类的用法和好处

    尽管抽象类也能提供类似接口的功能,但在AS3中,一个类只能继承一个抽象类。相比之下,一个类可以实现多个接口,这使得接口成为了一种更为灵活的选择。此外,接口还允许我们更自然地实现多态性,从而提高了代码的...

    23种设计模式实例及说明大全(as3语言描述)

    AS3中,可以通过接口和抽象类实现工厂方法。 3. 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。在AS3中,可以使用接口和类组合实现。 4. 建造者模式...

    AS3设计模式

    **AS3设计模式** 在软件开发领域,设计模式是一种经过时间考验的最佳实践,它解决了常见的编程问题并提供了可重用的解决方案。ActionScript 3.0(简称AS3)是Adobe Flash平台的主要编程语言,广泛用于创建交互式...

    AS3粒子系统

    AS3粒子系统是一种基于ActionScript 3(AS3)编程语言的高级图形技术,用于创建动态的、视觉吸引人的效果,如火焰、烟雾、下雪等自然现象,以及各种抽象的视觉特效。这个粒子系统提供了强大的功能,使得开发者能够...

    著名的 Tweener缓动类(AS3)

    **Tweener缓动类(AS3)详解** 在Flash平台的开发中,动画效果的实现是不可或缺的一部分,而Tweener就是一种强大的ActionScript3(AS3)库,专门用于创建平滑的缓动(tweening)效果。Tweener通过简单的API,为开发者...

    as3-parser.jar.zip

    AS3解析器可能使用了词法分析和语法分析技术,如词法分析器(Scanner或Lexer)将源代码分解为令牌流,语法分析器(Parser)则根据预定义的语法规则将令牌流转化为抽象语法树(AST)。这样的解析器可能被用于编译器、...

    AS2toAS3.pdf

    - AS3 支持更多的面向对象特性,如接口和抽象类等,这些特性有助于构建更复杂的应用程序。 #### 三、可视元素(MovieClip, Button…)的转换 **1. 主要机制的变化** AS3 对 MovieClip 和 Button 等可视元素的处理...

    AS3中Matrix类

    在AS3中,Matrix类是一个核心的图形变换类,它提供了对二维图形的旋转、缩放、平移和倾斜等操作。Matrix类的构造函数允许我们初始化一个包含六个参数的矩阵,这些参数决定了图形的变换效果。 1. 构造器参数详解: ...

    对象缓存池AS3实现

    通过定义一个抽象工厂类,然后让具体对象的类继承并实现这个抽象工厂,我们可以确保所有的对象都按照统一的规则创建。这样,`ObjectPool`类只需要知道如何调用工厂方法,而无需了解对象的具体类型,增加了代码的可...

    as3教程,手把手教你在flashbuilder4下开发as3

    **高级主题** 涉及更复杂的 OOP 概念,如抽象类、接口实现等,帮助开发者深入理解 AS3 的高级特性。 **示例**:“GeometricShapes”案例研究,通过具体例子展示如何利用 AS3 实现面向对象编程的最佳实践。 综上所...

    as3.0菜单类效果

    为了提高代码的可维护性和重用性,可以考虑将菜单类设计为更抽象的组件,支持多种布局方式(如水平、垂直)和主题样式。此外,还可以考虑菜单的国际化和动态加载数据。 总结,通过ActionScript 3.0的面向对象特性,...

    AS3_显示对象结构图.pdf

    * Interface:是 AS3 中的一种抽象类,定义了一个对象的行为和方法。 * Superclass:是 AS3 中的一个基类,定义了一个对象的基本结构和行为。 * Package:是 AS3 中的一个命名空间,用于组织和管理类和接口。 III. ...

Global site tag (gtag.js) - Google Analytics