This question already has answers here:
How to call the overridden method of a superclass?
                                
                                    (11个答案)
                                
                        
                                6年前关闭。
            
                    
这个问题是在采访中问我的。我的子类中有一个重写的方法。我想使用子类的实例来调用超类的方法。请记住,该方法已被覆盖。

以下代码的输出是NO NO PRINT HI
如果我想使用覆盖类的对象打印Print Hello怎么办?我怎么做?

class OverrideSuper {
    public void printHello() {
         System.out.println("Print Hello");
    }
}

public class Overriding extends OverrideSuper {
    public void printHello() {
         System.out.println("NO NO PRINT HI");
    }

    public static void main(String[] args) {
        //OverrideSuper obj1 = new OverrideSuper();
        Overriding obj2 = new Overriding();
        obj2.printHello();// this calls printHello() of class Overriding.
        //I want to call printHello() of OverrideSuper using obj2. How do I do that???
    }
}

最佳答案

我认为这将满足您的要求!尝试这个
当您调用obj2.printHello();时,执行将移至Overriding s printHello(),在该方法中,我已使用super.printHello();,这意味着首先调用超类的printHello() and compiler prints Print Hello,然后再次执行到Overriding s 和printHello()

class OverrideSuper {
    public void printHello() {
        System.out.println("Print Hello");
    }
}
    public class Overriding extends OverrideSuper {
            public void printHello() {
                super.printHello();
                System.out.println("NO NO PRINT HI");
            }

            public static void main(String[] args) {
                // OverrideSuper obj1 = new OverrideSuper();
                Overriding obj2 = new Overriding();
                obj2.printHello();// this calls printHello() of class Overriding.
                // I want to call printHello() of OverrideSuper using obj2. How do I do
                // that???
            }
        }


输出

Print Hello
NO NO PRINT HI

09-30 21:03