你可以从一个单独的类调用SuperClass中的方法,该类具有所述SuperClass的SubClass作为对象吗?

时间:2017-12-29 19:16:57

标签: java inheritance abstract-class

这个SubClass重写了原始方法,而SuperClass是一个抽象类。是否可以通过一个初始化为它的子类的对象在SuperClass中调用原始方法?

public class SubClass extends SuperClass {
    public void methodA() {
        System.out.println("SubClass: methodA");
    }

    public void methodB(int num) {
        System.out.println("SubClass: methodB " + ++num);
    }
}

public abstract class SuperClass {
    public void methodA() {
        System.out.println("SuperClass: methodA");
    }

    public void methodB(int num) {
        System.out.println("SuperClass: methodB " + num);
    }
}

我想做什么:

{
  public static void main(String args[]){
    SuperClass sup= new SuperClass();
    sup.methodA();
}

我认识到上面的代码不能用作抽象类无法实例化所以我试图这样做:

{public static void main(String args[]){
    SuperClass sup= new SubClass();
    sup.methodA(); //Trying to call method in original superclass
}

2 个答案:

答案 0 :(得分:2)

您始终可以创建扩展Super的匿名类或不会覆盖methodA()的子类。 以下是前一种方法的一个例子:

    SuperClass sup= new SuperClass(){};
    sup.methodA();

答案 1 :(得分:0)

不,你不能从外面做到这一点"。

这就是多态的整个目的/想法 - 要调用的确切方法取决于调用该方法的对象的类。

换句话说:你必须退后一步并修复你的设计。如果要调用基类方法,则需要基类对象 - 而不是子类1!

含义:没有简单的解决办法。相反,您应该仔细检查您的要求,然后提出一个类层次结构,帮助您实现这些要求。

我同意tsolakp概述的解决方案可行 - 但不要搞错:它只是一个(脏)绑带来修复症状。你最好把时间花在解决设计破坏的根本原因上。