在AS3.0中,访问控制符共有4个,它们分别昌:public、private、protected和internal。它们都是通过AS3内置的namespace(命名空间)实现的。除了使用这四个访问控制符外,还可以通过namespace实现自定义的命名空间来实现更为灵活的访问控制。访问控制符要放在每一个类成员的前面,每个访问控制符只控制跟在自己后面的那个类成员,不可以同是控制多个。它不仅控制实例属性和方法,也控制静态属性和方法。
1、internal包内访问 如果一个类成员前面没有加任何访问控制符,那么它的访问控制符就是internal,它表示在包的内部,只要是和当前类在同一个包中的其他类都可以访问这个类成员。换句话说,两个类如果拥有相同的包声明,那么这两个类都可以访问彼此的internal成员,这就好比对同包的类,internal成员相当于public,对非同包的类相当于privte。所以internal称为包内访问。 使用internal控制符,其实质是对封装思想和package模块化思想的具体体现,将package内部类成员互动对外隐藏,即封装,默认情况下同一包中的类可以共同协作,对internal类成员可以相互访问,但对包外部限制了访问。因此对于需要相互协作的类可以把它们放到同一个包中,将需要互相访问的类成员设置为internal或干脆不设置访问控制符。
2、public完全公开 在类的成员前使用public访问控制符,则表示的有类都可以访问这个类中的这些public类成员,也就是说,在任何地方、任何对象都可以访问这些类成员。public的类成员可以看成是这个类对外部做出的承诺,一旦决定日后不能轻易更改。 一旦发现某个类成员需要被外部频繁访问,就要先考虑这个类员的设计是否不当,可否独立出来,再考虑可否归入那些需要频繁访问的包中,使用internal级别来实现,最后再考虑使用public来实现。总之,尽量将类成员的访问权限控制到最低限度,这在日后的修改、维护代码时将带来最大的自由。
3、private私有成员 private修改的类成员,称为私有成员,它在as3中是访问控制严格的。除了当前类中的成员,所有其他的类的方法都不可以访问到该成员,即使是在同一个包中的类或者该类的子类也不可以访问到。 使用private成员时需要注意的一点是,对于复杂数据类型的属性,private的封装只是说不能通过当前类的实例来访问,并不意味着这个属性持有的引用所指向的对象不能被访问。private中是限制了直接访问实例私有成员,却不能阻止用引用业访问私服属性指向的对象。
4、protected子类可访问 protected访问控制符修饰的类成员只能被当前类和当前类的子类访问。它和package没有关系,即使当前类和子类不在同一个包中,也可以访问到protected类的成员,如果不是当前类的子类,那么protected 和private是一样的。