开发者

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

开发者 https://www.devze.com 2022-12-17 22:44 出处:网络
Aside from adding a method explicitly on the subclass to call a super method, is there anyway to \"unhide\" it temporarily? I would like to call the super.blah() method on a Test2 instance. Must I use

Aside from adding a method explicitly on the subclass to call a super method, is there anyway to "unhide" it temporarily? I would like to call the super.blah() method on a Test2 instance. Must I use a开发者_StackOverflow中文版 method like originalBlah, or is there another way?

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");
    }

}

Edit: Sorry to add to the question late in the game, but I had a memory flash (I think): in C# is this different? That it depends on which class you think you have (Test1 or Test2)?


As I understand you want to do something like Test1 b = new Test2(); b.super.blah(). This cannot be done, super is strictly limited to calling from inside the subclass to the superclass.


No, there is no way to subvert the concept of inheritance like that.


It is hard to imagine situation when you need thing like this.

You can forbid method overriding.
Also you can consider Template Method pattern technique.


Simple answer is : you can't

you could have blah be

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

}

or go the originalBlah way, or decouple the blah implementation altogether to be able to call whichever implementation you need but that's about it.

0

精彩评论

暂无评论...
验证码 换一张
取 消