Abstract class 非抽象方法调用

Abstract class non abstract method invoke

这似乎是个基本问题。但值得在采访前澄清。

我有一个抽象的非抽象方法class。它的具体 class 覆盖了那个方法。但是我想调用父class的原始方法来调用而不是重写方法。有什么办法吗?

据我所知,无法调用原始方法?

public abstract class Testabstract {

    public void t1() {
        System.out.println("parent");
    }

}


public class Testconcrete extends Testabstract {

    public void t2() {
        System.out.println("child11");
    }

    public void t1() {
        System.out.println("childss");
    }

}

public class Main {

    public static void main(String[] args) {

        Testconcrete a = new Testconcrete();

        a.super.t1();// compile error
        a.t2();

    }
}

super 关键字只能在子项中使用 with class。

对于前任你可以试试

 public void t2() {
        super.t1();
        System.out.println("child11");
    }

投射到 Parent 也无法正常工作,您的基础元素仍然是 Child

因此您无法以干净的方式从 Child class 外部访问。不知道他们这样做是否有任何幼稚的方法。

不,您不能直接调用超类的重写方法。这是设计使然;子类可能会添加某些正确性所必需的行为(例如维护某种缓存或其他数据结构)或功能要求(例如日志记录)。绕过子类的功能会使模型的正确性面临风险并破坏确保它的封装。

您的理解是正确的。如果不更改 类 TestabstractTestconcrete 之一,则无法在 Testconcrete.

的实例上调用原始方法

我认为甚至不可能通过反射来做到这一点。