オレにだって…アクセスできないことぐらい…ある…

by o8que
できなさそうでできるものと、できそうでできなかったもの。
♥0 | Line 53 | Modified 2010-12-21 21:21:58 | MIT License
play

ActionScript3 source code

/**
 * Copyright o8que ( http://wonderfl.net/user/o8que )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/eOgc
 */

// @see http://wonderfl.net/c/4PgI
package {
    import flash.display.Sprite;
    
    public class Main extends Sprite {
        
        public function Main() {            
            var a1:A = new A();
            var a2:A = new A();
            
            a1.callFuncA(a2); // ok
            
            var c1:C = new C();
            var c2:C = new C();
            var d1:D = new D();
            var d2:D = new D();
            
            c1.callFuncBOfB_1(c2 as B); // error
            c1.callFuncBOfB_2(c2 as B); // ok
            c1.callFuncBOfC_1(c2);      // ok
            c1.callFuncBOfC_2(c2);      // ok
            c1.callFuncBOfB_1(d2 as B); // error
            c1.callFuncBOfB_2(d2 as B); // ok
            c1.callFuncBOfD_1(d2);      // error
            c1.callFuncBOfD_2(d2);      // ok
            
            d1.callFuncBOfB_1(c2 as B); // ok
            d1.callFuncBOfB_2(c2 as B); // error
            d1.callFuncBOfC_1(c2);      // ok 
            d1.callFuncBOfC_2(c2);      // error
            d1.callFuncBOfB_1(d2 as B); // ok
            d1.callFuncBOfB_2(d2 as B); // error
            d1.callFuncBOfD_1(d2);      // ok
            d1.callFuncBOfD_2(d2);      // ok
        }
    }
}

class A {
    private function funcA():void { }
    public function callFuncA(a:A):void { a.funcA(); }
}

class B {
    protected function funcB():void { }
    public function callFuncBOfB_1(b:B):void { b.funcB(); }
    public function callFuncBOfC_1(c:C):void { c.funcB(); }
    public function callFuncBOfD_1(d:D):void { d.funcB(); }
}

class C extends B {
    public override function callFuncBOfB_1(b:B):void { b.funcB(); }
    public override function callFuncBOfC_1(c:C):void { c.funcB(); }
    public override function callFuncBOfD_1(d:D):void { d.funcB(); }
    public function callFuncBOfB_2(b:B):void { super.callFuncBOfB_1(b); }
    public function callFuncBOfC_2(c:C):void { super.callFuncBOfC_1(c); }
    public function callFuncBOfD_2(d:D):void { super.callFuncBOfD_1(d); }
}

class D extends B {
    public function callFuncBOfB_2(b:B):void { b.funcB(); }
    public function callFuncBOfC_2(c:C):void { c.funcB(); }
    public function callFuncBOfD_2(d:D):void { d.funcB(); }
}