当前位置 : 主页 > 手机开发 > 其它 >

如何从继承类调用的抽象类调用抽象方法

来源:互联网 收集:自由互联 发布时间:2021-06-19
我想从继承类调用的抽象类中调用抽象类的方法. 抽象类: public abstract class Abstract { protected void updateMotionY(float deltaTime) { System.out.println("Abstrcat updateMotionY"); } public void update(float deltaTim
我想从继承类调用的抽象类中调用抽象类的方法.

抽象类:

public abstract class Abstract {
    protected void updateMotionY(float deltaTime) {
        System.out.println("Abstrcat updateMotionY");
    }
    public void update(float deltaTime) {
        this.updateMotionY(deltaTime);
    }
}

继承类:

public class Obj extends Abstract {
    @Override
    protected void updateMotionY(float deltaTime) {
        System.out.println("updateMotionY");
        super.updateMotionY(deltaTime);
    }
    @Override
    public void update(float deltaTime) {
        super.update(deltaTime);
    }
}

主要方法类:

public static void main(String[] args) {
    (new Obj()).update(10.0f);
}

每当我尝试在主类中调用新的Obj().update()方法时,它会打印“updateMotionY”和“Abstrcat updateMotionY”.我想只获得“Abstrcat updateMotionY”.

谁能告诉我如何解决这个问题?

(new Obj()).update(10.0f)调用Obj :: update调用Abstract :: update调用this.updateMotionY.因为这是Obj的一个实例,所以它调用Obj :: updateMotionY.

这将打印“updateMotionY”.

然后调用super.updateMotionY(deltaTime),它是Abstract :: updateMotionY.

这将打印“Abstrcat updateMotionY”.

这就是调用层次结构的结束,一切都在展开.

从根本上说,你的困惑似乎源于this.updateMotionY(deltaTime);在Abstract类中,解析为Obj类中的updateMotionY.那基本上是the whole point of polymorphism.

你可以做的一件事是添加一个包含实际实现的私有方法(以便它不能被覆盖),并遵从它:

public abstract class Abstract {
    private void motionY(float dt)
    {
        System.out.println("Abstrcat updateMotionY");
    }

    protected void updateMotionY(float deltaTime) {
        motionY(deltaTime);
    }
    public void update(float deltaTime) {
        motionY(deltaTime);
    }
}
网友评论