浅谈类的静态

在一个类中,如果一个声明为静态的属性或方法,将影响的是全局性的,就是说该属性或方法是对类而言的,而不是对对象而言,

对象是对类的实现,如果是对类而言,当类里面的东西改变,将影响所有的对象,(不管是该对象是在改类改变前生成的还是该类改变后生成,因为类里面静态的属性或方法的指针都指向同一块内存地址,如果上面的讲述理由还有困难,请看下面的代码)

PHP版:

 

ExpandedBlockStart.gif 代码
class  a{
    
public   static   $c = 5 ;
    
public   function  u(){
        self
:: $c = 6 ;
    }
    
public   function  o(){
        
echo  self :: $c ;
    }
}
$a = new  a();
echo   $a -> o();
$b = new  a();
$b -> u();
echo   $b -> o();
echo   $a -> o();

 

 

输出将是:566

AS3版代码:

 

ExpandedBlockStart.gif 代码
#Main.as
package 
{
    import flash.display.Sprite;
    import flash.events.Event;
    
    
/* *
     * ...
     * @author lonely
     
*/
    public class Main extends Sprite 
    {
        
        public 
function  Main(): void  
        {
            
if  (stage) init();
            
else  addEventListener(Event.ADDED_TO_STAGE, init);
        }
        
        private 
function  init(e:Event  =   null ): void  
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            
//  entry point
             var  a:Test  =   new  Test();
            a.o();
            
var  b:Test  =   new  Test();
            b.u();
            b.o();
            a.o();
        }
        
    }
    
}
#Test.as
package  
{
    
/* *
     * ...
     * @author lonely
     
*/
    public class Test
    {
        
        public static 
var  a: int   =   5 ;
        public 
function  Test() 
        {
            
        }
        public 
function  u(): void  {
            a 
=   7 ;
        }
        public 
function  o(): void  {
            trace (a);//AS3中的静态不能用this.a引用,非静态可以
        }
        
    }

}

 

 

输出是577

 

 

总结:

静态方法是相对于类而言的,不是针对对象而言的,所以会有以上结果,因为整个程序中,类定义是只有一个的,

延伸:在JS中,因为没有类的定义,所以基本上也谈不上有什么静态的方法,但可以添加函数体的方法.

因为静态方法是针对类或函数体(JS)而言的,所以不存在继承感念(但PHP里竟然可以继承静态方法,有点奇怪...)

在AS中,父类的静态方法在子类是不可见的. 

 

在PHP中,静态方法很普通方法基本没有很大的不同,就是多了个::访问,静态方法也可以继承(感觉有点怪怪的,虽然一直这样用..),对于PHP的类和其他语言的类,这点该是明显不同的.

 

 

转载于:https://www.cnblogs.com/liushannet/archive/2010/11/22/1883835.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值