• 浅谈类的静态


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

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

    PHP版:

    代码
    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版代码:

    代码
    #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的类和其他语言的类,这点该是明显不同的.

  • 相关阅读:
    Objective-C 数据集合
    iOS PresentViewControlle后,直接返回根视图
    NSMutableString 常用操作
    NSString 的常用操作
    iOS 获取网络状态
    C#属性封装
    C#类的一些概念
    ref和out 传递参数(C#)
    C#字符串的恒定性
    C#方法的重载和方法的可变参数
  • 原文地址:https://www.cnblogs.com/liushannet/p/1883835.html
Copyright © 2020-2023  润新知