繁体   English   中英

抽象类非抽象方法调用

[英]Abstract class non abstract method invoke

这似乎是基本问题。 但在面试之前值得澄清。

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

据我了解,没有办法调用原始方法吗?

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关键字只能在子类中使用。

对于前,你可以尝试做

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

强制转换为Parent仍然无法正常工作,您的基本元素是Child

因此,您不能以干净的方式从Child类的外部进行访问。 不完全知道它们是否是幼稚的方式。

您的理解是正确的。 如果不更改TestabstractTestconcrete类之一,就无法在Testconcrete实例上调用原始方法。

我认为反射是不可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM