【问题标题】:How to Pass a Child Class into a method requiring Super Class as parameter如何将子类传递给需要超类作为参数的方法
【发布时间】:2013-12-11 22:46:52
【问题描述】:

所以我正在学习 Java,并且我有一个需要超类作为参数的接口方法。我想将子类作为参数传递。任何人都知道一个简单的方法来做到这一点。父类来自我正在使用的动画库,并从中创建了我自己的子类。

例如:

public class B extends A {

    public void UpdateAnimation() {
        final Interface intefaceMethod = new Interface() {
            @Override
            public void onAnimationEnd(//**How to pass child class?**//) {
                //child class stuff to do at end of animation
            }
        };
    }

}

【问题讨论】:

  • 是否要将参数限制为子类类型?
  • 我正在尝试重写接受子类的方法,以便我可以调整仅在子类中的变量。如果我不覆盖它,该方法只能访问超类的变量。

标签: java


【解决方案1】:

您只需将其传递为:

onAnimationEnd(childClass);

这是多态性的定义,孩子必须能够充当父母。

例如,您可以从 Java API 中看到 paintComponent() 方法:

@Override
public void paintComponent(Graphics g) {    
   Graphics2D g2d = (Graphics2D) g;    
}

尽管 Graphics 是旧时声明的参数,但现在给出了 Graphics2D 对象(它扩展了 Graphics 类),但除非你像这样转换它,否则它将充当 Graphics 对象。

【讨论】:

  • 但是将方法的参数更改为不同的类型将被视为该方法的新实例,不是吗?因此,它将不再是超类方法的覆盖,因此超类中的方法调用将不会使用新方法。除非我只是没有以正确的方式看待这个。
  • @user3092678 没错,你不能改变覆盖方法的定义。但是我认为您的问题是将子对象传递给带有父参数的已定义方法。
  • 这是我的问题,Parent类使用了以父类为参数的接口。该方法旨在被覆盖,因此您可以执行所需的操作。但是,我需要的操作是 Child 类中的变量。我需要能够用我的子类覆盖该方法和/或以某种方式使用被覆盖的方法访问我的子类变量。
猜你喜欢
  • 2017-04-09
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-26
  • 2018-03-02
  • 2020-04-07
相关资源
最近更新 更多