Actionscript 3 被继承的私有功能

Actionscript 3 被继承的私有功能,actionscript-3,flash,oop,inheritance,actionscript,Actionscript 3,Flash,Oop,Inheritance,Actionscript,这是非常自解释的,但是我在子类中的代码一直在继承超类中的私有函数,我相信这是一个非常大的问题 你认为你能解释为什么我代码中的私有函数被继承到超类的子类中吗 超级班: package { import flash.display.MovieClip; import flash.events.Event; public class Level1 extends MovieClip { public static var rightSide:Boolea

这是非常自解释的,但是我在子类中的代码一直在继承超类中的私有函数,我相信这是一个非常大的问题

你认为你能解释为什么我代码中的私有函数被继承到超类的子类中吗

超级班:

package  {

    import flash.display.MovieClip;
    import flash.events.Event;

    public class Level1 extends MovieClip {

        public static var rightSide:Boolean;
        public static var leftSide:Boolean;

        public function Level1() {
            // constructor code
            stage.addEventListener(Event.ENTER_FRAME, loop)
        }
        public function loop(e:Event){
            trace("x is" + x)
            endofGround();
            hhh();
            //if they are left or right move the ground in proportion to their speed
            if(rightSide){x-=Okechuku.speedX; trace("right")}
            if(leftSide){x+=Okechuku.speedX; trace("left")}
        }
        private function endofGround(){
            //if((x>=1720.35) || (x<=-81.5)){trace("LOOOL");}
            if(x>=1720.35){trace("TOO FAR LEFT");}
            if(x>=1){trace("TOO FAR RIGHT");}
            scaleY=2

        }
        private function hhh():void{
            rotation+=1;
        }
    }

}

}

当您继承一个类时,超类中的所有方法和变量仍然存在,无论它们是如何声明的。如果它们被声明为私有,子类就无法访问它们

基类构造函数仍然运行,如果它调用私有函数,它们仍然执行

如果您想更改发生在子类中的某些内容,则需要重写该方法,然后替换旧方法-尽管旧方法仍然可以使用super关键字访问

编辑

下面是一个你可能会觉得有用的例子

public class BaseClass {
    public function BaseClass(){
        init();
    }

    protected function init():void {
        myPrivateFunction();
    }

    private function myPrivateFunction():void {
        trace("PrivateFunction!!!");
    }
}

public class SubClass1 extends BaseClass {
    public function SubClass1(){

    };
}

public class SubClass2 extends BaseClass {
    public override init():void{
        trace("No private function running here");
    }
}
在上面的示例中,实例化子类1将导致PrivateFunction!!!-因为基类构造函数仍然运行并执行它的代码私有或其他


但是,实例化子类2会导致此处没有运行私有函数的跟踪,因为它重写了init方法,而init方法现在不再从基类调用私有函数。在子类2中,您还可以调用super.init来获取要运行的基类方法,然后基类方法调用输出原始跟踪的私有方法。

当您继承一个类时,来自该类的所有方法和变量仍然存在,无论它们是如何声明的。如果它们被声明为私有,子类就无法访问它们

基类构造函数仍然运行,如果它调用私有函数,它们仍然执行

如果您想更改发生在子类中的某些内容,则需要重写该方法,然后替换旧方法-尽管旧方法仍然可以使用super关键字访问

编辑

下面是一个你可能会觉得有用的例子

public class BaseClass {
    public function BaseClass(){
        init();
    }

    protected function init():void {
        myPrivateFunction();
    }

    private function myPrivateFunction():void {
        trace("PrivateFunction!!!");
    }
}

public class SubClass1 extends BaseClass {
    public function SubClass1(){

    };
}

public class SubClass2 extends BaseClass {
    public override init():void{
        trace("No private function running here");
    }
}
在上面的示例中,实例化子类1将导致PrivateFunction!!!-因为基类构造函数仍然运行并执行它的代码私有或其他


但是,实例化子类2会导致此处没有运行私有函数的跟踪,因为它重写了init方法,而init方法现在不再从基类调用私有函数。在子类2中,您还可以调用super.init来获取要运行的基类方法,然后基类方法调用输出原始跟踪的私有方法。

私有方法不会被继承。它们存在于超类中,但在子类中不可访问

超类中的私有方法/变量不会神奇地消失。如果你在你的超级班上有这个,你认为会发生什么

public function doSomethingPublic():void {
   doSomethingPrivate();
}

private function doSomethingPrivate():void {
  //do something
}
然后从子类调用super.doSomethingPublic?现在这将是一个非常奇怪的场景。。。它应该抛出错误还是应该发生什么?
当然不应该。它将只调用doSomethingPrivate,因为这个函数存在于超类中。

私有方法不会被继承。它们存在于超类中,但在子类中不可访问

超类中的私有方法/变量不会神奇地消失。如果你在你的超级班上有这个,你认为会发生什么

public function doSomethingPublic():void {
   doSomethingPrivate();
}

private function doSomethingPrivate():void {
  //do something
}
然后从子类调用super.doSomethingPublic?现在这将是一个非常奇怪的场景。。。它应该抛出错误还是应该发生什么?
当然不应该。它将简单地调用doSomethingPrivate,因为这个函数存在于超类中。

您误解了私有方法的使用。它们将始终出现在超级类中,如果在内部调用,它们最终将运行。如果您想阻止私有方法运行,那么它不应该是私有的,而是受保护的。受保护的方法与私有方法类似,只是它们是继承的,因此可以重写。重写方法允许您实现不同的功能,或者完全关闭该方法。您可以重写但不添加代码=方法处于关闭状态。

您误解了私有方法的使用。它们将始终出现在超级类中,如果在内部调用,它们最终将运行。如果您想阻止私有方法运行,那么它不应该是私有的,而是受保护的。受保护的方法与私有方法类似,只是它们是继承的,因此可以重写。重写方法允许您实现不同的功能,或者完全关闭该方法。您可以重写该方法,但add no code=method已关闭。

需要更多信息。到底发生了什么?在子类中只能访问受保护的和公共的方法,问题可能出在其他地方。@LDMediaServices,子类从超类的私有函数继承了所有代码,而不仅仅是突出显示关键字sorryHow do

你知道吗?应用程序的哪些症状使您相信这一点?你有错误吗?你用的是什么IDE?只是IDE错误地提示你不应该使用它。超级类sys rotation+=1中的一个私有函数仅用于超级类,但子类也继承了这个rotate函数,这非常令人沮丧。需要更多信息。到底发生了什么?子类中只能访问受保护的和公共的方法,问题可能出在其他地方。@LDMediaServices,子类继承了超类私有函数中的所有代码,而不仅仅是突出显示关键字,对不起,您怎么知道?应用程序的哪些症状使您相信这一点?你有错误吗?你用的是什么IDE?只是IDE错误地提示你不应该使用它。超级类sys rotation+=1中的一个私有函数仅适用于超级类,但子类也继承了这个旋转函数,这非常令人沮丧。你的意思是,它们仍然影响子类,但子类不能对它们产生任何影响?确切地说。这是一种确保某些功能/变量不会被意外破坏的方法。谢谢你,我的好人,这可能违反了网站的规则,但我如何才能将不应在私有类中继承的私有功能添加到超级类中?你不能。但你可以忽略任何导致它的因素。如果你更新你的问题来解释你想要完成什么,我可以给你一个代码示例。你的基类应该只有扩展它的所有东西的基本功能。请记住,您可以扩展一个类,该类可以扩展另一个类到您想要的任何深度,因此只需剥离基类并创建另一个扩展它的类。您的意思是,它们仍然影响子类,但子类不能对它们产生任何影响?确切地说。这是一种确保某些功能/变量不会被意外破坏的方法。谢谢你,我的好人,这可能违反了网站的规则,但我如何才能将不应在私有类中继承的私有功能添加到超级类中?你不能。但你可以忽略任何导致它的因素。如果你更新你的问题来解释你想要完成什么,我可以给你一个代码示例。你的基类应该只有扩展它的所有东西的基本功能。请记住,您可以扩展一个类,该类可以扩展另一个类的任意深度,因此只需剥离基类并创建另一个扩展它的类即可。