我想从继承类调用的抽象类中调用抽象类的方法. 抽象类: 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); } }