`

关于类、子类、继承和override重写函数

阅读更多
【贝武易科技专业flex3D开发--www.newflash3d.com】
在flex中我们经常遇到类、子类、继承、方法重写等问题,下面我们就简单的开看看他们之间的关系。

类的修饰词:
类有以下的修饰词:

public:公有类型,这个类可以在任何地方的任何对象访问,一般用来定义全局使用的类。
internal:内部类型,只能在同一个package 中的类才能访问,如果没有指定修饰词为internal。
dynamic:动态类型,类的属性和方法不确定,允许在运行时动态的添加。MovieClip 类便是动态类。当要继承动态类时,也要定义为动态类型。一般只用于特殊场合。
final:终点类型,表示类是继承关系中的终点,不能被继承。可以被视为一个固定的、无法被动态修改的常数。


方法的类型(方法的修饰词):

public 公共的,都可以用的
protected 内部和子类可以用的
private  只有内部可以用的
internal 同一个包里可以用的

我们一般继承的方法都采取protected类型的方法。
哈哈,说得详细点。
属性和函数有以下修饰词:public > internal > protected > private
public:公有类型,可以被所有的类使用。
protected:保护类型,定义的属性和函数可以在内部使用,或者在子类的内部使用,但外部是无法看到的。
private:私有类型,最严格的类型,只能在类的内部使用,外部无法看到的。
internal:内部类型,只能在同一个package 内部使用,可以被同一个 package 内的类访问。
我们在项目里建立一个文件夹hjh3dcom,并在它里面生成一个类,名为baseClass.as,意思是说,它是一个基类(基础的类),其他的类延伸至于这个基类。
代码如下:
package hjh3dcom
{
	public class baseClass
	{
		public function baseClass()
		{
			trace("这是基类的构造函数");
		}
		public function printout():void{
			trace("这是基类的printout方法");
		}

	}
}

我们接着生成这个类的对象,主程序代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init();">
<mx:Script>
	<![CDATA[
		import hjh3dcom.baseClass;
		private var myclass:baseClass;
		private function init():void{
			myclass=new baseClass();
			myclass.printout();
		}
	]]>
</mx:Script>
	
</mx:Application>

debug一下,我们可以看到console平台打印输出了:
这是基类的构造函数
这是基类的printout方法
如下图:

这里需要注意的是,我们只有在debug模式下才能trace()出内容来,如果你的debug有问题,有可能你的flashplayer的版本不是debug版的,如果那样的话,你可以把你的flashplayer先卸载,然后在我们的flash资源集里下载flashplayer的debug版本。
http://bvu.iteye.com/blog/284863
当我们生成类baseClass的实例myclass=new ,执行了构造函数,执行了trace("这是基类的构造函数");语句,下面的myclass.printout();调用了printout()方法,执行了trace("这是基类的printout方法");,所以我们得出了以上的结果。
下面,我们生成一个extendsClass.as
代码如下:
package hjh3dcom
{
	public class extendsClass extends baseClass
	{
		public function extendsClass()
		{
			super();
		}
		
	}
}

我们把主程序的代码改为
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init();">
<mx:Script>
	<![CDATA[
		import hjh3dcom.*;
		private var myclass:extendsClass;
		private function init():void{
			myclass=new extendsClass();
			myclass.printout();
		}
	]]>
</mx:Script>
	
</mx:Application>

执行,输出结果为:
这是基类的构造函数
这是基类的printout方法
下面,我们可以在子类把父类的printout()重写,代码如下:

我们会获得结果:
这是基类的构造函数
这是extendsClass类重写的printout()方法
package hjh3dcom
{
	public class extendsClass extends baseClass
	{
		public function extendsClass()
		{
			super();

		}
		override public function printout():void{
				
			trace("这是extendsClass类重写的printout()方法");
		} 
		
	}
}


第一个输出不变,但是第二个输出为我们重写后的printout()方法了,如果我们加入这句
super.printout();
那么新的代码如下:
package hjh3dcom
{
	public class extendsClass extends baseClass
	{
		public function extendsClass()
		{
			super();

		}
		override public function printout():void{
			super.printout();	
			trace("这是extendsClass类重写的printout()方法");
		} 
		
	}
}

输出结果为:
这是基类的构造函数
这是基类的printout方法
这是extendsClass类重写的printout()方法
继承的两个方法及重写后的内容都一起出现了。这就是override(重写)的概念,通过重写,我们可以扩展我们基于父类的新的属性和方法。
这里的super,是继承的意思。

【贝武易科技专业flex3D开发--www.newflash3d.com】
  • 大小: 18.2 KB
分享到:
评论

相关推荐

    Lua 类的继承与函数override

    这里 `Student` 类继承了 `Person` 类,添加了一个新的属性 `grade` 并重写了 `sayHello` 方法。当我们创建一个 `Student` 对象时,它不仅具有 `Person` 的所有属性和方法,还增加了自己的特性。 最后,我们谈谈...

    Lua 类的继承与override

    本文将深入探讨 Lua 中如何实现类的继承以及方法的重写(override)。 首先,我们来理解 Lua 中的“类”。在 Lua 中,类通常被表示为一个表(table),这个表包含了类的一些属性和方法。创建一个类,我们可以定义一...

    Qt之线程的使用(继承QThread重写run函数) 源码

    在创建自定义线程时,通常我们会继承`QThread`类,并重写`run()`函数。这个函数是我们在线程中执行特定任务的地方。例如: ```cpp class MyThread : public QThread { Q_OBJECT public: explicit MyThread...

    简单的java类的重写还有父子类的练习(多种图形面积求取)

    这个练习不仅涵盖了Java中的继承和重写概念,还涉及到了抽象类、接口(虽然这里没有用到)、构造函数以及数学运算在编程中的应用。这种设计模式使得代码结构清晰,易于扩展,当需要添加新的图形类型时,只需创建一个...

    c#中类的继承

    本篇文章将详细介绍C#中的类继承,包括如何实现继承、构造函数在继承中的作用、以及重载、重写和隐藏的概念。 #### 二、实现继承 在C#中,实现类的继承非常简单。只需在定义子类时,在类名后面加上冒号 `:`,紧...

    类的继承的简单实现

    1. **类的继承定义**:继承允许子类(也称为派生类)获取父类的属性和方法,而无需重新编写它们。这使得子类可以构建在父类的基础上,扩展其功能或覆盖特定行为。 2. **关键字表示**:在Python中,子类继承父类通常...

    基类子类虚函数的调用顺序问题

    在C++编程语言中,虚函数(virtual functions)是实现多态性的一种关键机制,它允许我们通过指针或引用调用子类重写的方法,即使该指针或引用指向的是基类。当我们讨论基类与子类的虚函数调用顺序时,这涉及到构造...

    基于Android使用的重写类

    4.1 多态性:由于类的继承和方法的重写,Android对象可以展现出多态性,即一个对象可以在不同的上下文中表现出不同的行为。例如,多个Activity可以继承自同一个抽象基类,而这个基类可以定义一些通用方法。 4.2 ...

    4类的继承与派生继承与派生

    此外,派生类还可以重写(override)基类的方法以提供不同的实现,这称为覆盖。 ### 类成员的访问控制 在继承过程中,基类的成员访问控制是一个关键点。C++ 支持三种访问级别:`public`、`protected` 和 `private`...

    c#切换执行程序顺序,有些中级开发小伙伴还是搞不太明白在继承父类以及不同场景实例化的情况下,父类和子类的各种方法的执行顺序到底是

    C#编程语言中,类和对象的构造及方法执行顺序是一个关键的概念,尤其在涉及到继承、构造函数、虚方法和重写时。以下是对给定场景的详细解释: 1. **场景一:只实例化父类** 当我们创建一个`A`类型的对象时,只会...

    Java中类的继承学习小结

    覆盖(Override)是子类对父类方法的一种重写,用于提供不同的实现。在Java中,覆盖方法需要满足以下条件: 1. 方法名和参数列表必须完全相同。 2. 访问权限不能更低(更私有)。 3. 返回类型必须兼容(可以是父类...

    .net的重写继承封装

    在这个例子中,`Dog`类继承自`Animal`类,所以`Dog`不仅拥有`Eat`方法,还可以自定义`Bark`方法。 **三、封装(Encapsulation)** 封装是隐藏对象的内部实现细节,只对外提供公共接口供其他代码使用。这样可以防止...

    C#子类对基类方法的继承、重写与隐藏详解

    C#子类对基类方法的继承、重写与隐藏是OOP编程中的一些重要概念,掌握这些概念对于学习C#和使用C#编程语言非常重要。下面,我们将通过示例代码详细介绍C#子类对基类方法的继承、重写与隐藏。 一、子类继承基类非...

    java实验三 类的继承--圆.rar

    这个"java实验三 类的继承--圆.rar"文件显然包含了一个关于如何在Java中实现类继承的实验项目,涵盖了实验代码、实验报告、心得体会以及相关的习题解答。下面我们将深入探讨类的继承这一主题。 首先,类的继承允许...

    对python中类的继承与方法重写介绍

    总结来说,Python中的类继承和方法重写是强大的工具,它们让代码能够复用和扩展。通过继承,我们可以构建层次化的类结构,让代码更加模块化;通过方法重写,我们可以根据需要定制或改进父类的行为,而不必改动原有...

    c++继承与多态,虚函数实例

    继承允许一个类(子类)从另一个类(基类)继承属性和方法,而多态则允许不同类的对象对同一消息做出不同的响应,提高了代码的灵活性和重用性。虚函数在实现多态中扮演着关键角色,它可以确保程序在运行时能够调用到...

    继承设计练习

    在C++编程语言中,继承是面向对象编程的一个核心特性,它允许我们创建一个新类(子类)作为现有类(父类)的扩展。这个练习主要是为了帮助开发者熟悉如何在C++中实现继承设计。下面我们将深入探讨C++继承的基本概念...

    重写(override)和重载(overload)的区别

    在C#编程语言中,重写(Override)和重载(Overload)是两种非常重要的概念,它们分别涉及对象多态性和方法的可选性。理解这两者的区别对于编写高效且易于维护的代码至关重要。 首先,让我们深入了解一下重写(Override)...

    C++ 虚函数和抽象类的简单应用(cpp&h文件)

    虚函数允许子类重写基类方法,而抽象类定义了子类必须遵循的规范。在VS2010这样的开发环境中,我们可以方便地组织和管理这些类的源代码文件,以便于项目的开发和维护。通过理解和熟练运用这些概念,可以提高代码的可...

Global site tag (gtag.js) - Google Analytics