繁体   English   中英

Java隐藏:客户端类可以通过什么方式调用`super`?

[英]Java Hiding: Any Way for Client Classes to Call `super`?

除了在子类上显式添加一个方法来调用一个super方法之外,还是要暂时“取消隐藏”它吗? 我想在Test2实例上调用super.blah()方法。 我必须使用像originalBlah这样的方法,还是有另一种方式?

public class TestingHiding {
    public static void main(String[] args) {
        Test1 b = new Test2();
        b.blah();
    }
}

class Test2 extends Test1 {
    public void blah() {
        System.out.println("test2 says blah");
    }

    public void originalBlah() {
        super.blah();
    }
}

class Test1 {
    public void blah() {
        System.out.println("test1 says blah");
    }

}

编辑:很抱歉在游戏后期添加问题,但我有一个内存闪存(我认为):在C#中这是不同的? 这取决于你think你拥有哪个班级(Test1或Test2)?

不,没有办法像这样颠覆继承的概念。

据我所知,你想做一些像Test1 b = new Test2(); b.super.blah() Test1 b = new Test2(); b.super.blah() 这是不可能的,super严格限于从子类内部调用到超类。

当你需要这样的东西时很难想象情况。

您可以禁止方法覆盖。
您还可以考虑模板方法模式技术。

简单的答案是:你做不到

你可能会有

class Test2 extends Test1 {
    public void blah() {
        if("condition"){
            super.blah()
        }
        System.out.println("test2 says blah");
    }

}

或者采用原始的方式,或者完全解除blah实现,以便能够调用您需要的任何实现,但这就是它。

暂无
暂无

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

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