这个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
}
答案 0 :(得分:2)
您始终可以创建扩展Super的匿名类或不会覆盖methodA()
的子类。
以下是前一种方法的一个例子:
SuperClass sup= new SuperClass(){};
sup.methodA();
答案 1 :(得分:0)
不,你不能从外面做到这一点"。
这就是多态的整个目的/想法 - 要调用的确切方法取决于调用该方法的对象的类。
换句话说:你必须退后一步并修复你的设计。如果要调用基类方法,则需要基类对象 - 而不是子类1!
含义:没有简单的解决办法。相反,您应该仔细检查您的要求,然后提出一个类层次结构,帮助您实现这些要求。
我同意tsolakp概述的解决方案可行 - 但不要搞错:它只是一个(脏)绑带来修复症状。你最好把时间花在解决设计破坏的根本原因上。