gpt4 book ai didi

java - 调用父类(super class)的重写方法

转载 作者:行者123 更新时间:2023-11-30 04:02:47 25 4
gpt4 key购买 nike

这个问题是我在面试时被问到的。我的子类中有一个被重写的方法。使用子类的实例,我想调用父类(super class)的方法。请记住,该方法已被重写。

以下代码的输出是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???
}
}

最佳答案

我认为面试官希望你编写另一个调用 super.printHello() 的方法:

public class Overriding extends OverrideSuper {
public void printHello(){
System.out.println("NO NO PRINT HI");
}
public void superHello() { // You can make this private or protected, too
super.printHello();
}
public static void main(String[] args) {
//OverrideSuper obj1 = new OverrideSuper();
Overriding obj2 = new Overriding();
obj2.superHello();// this calls printHello() of class OverrideSuper .
}
}

本质上,他希望你告诉他,一旦方法被重写,就无法从外部调用基类的方法。解决这个问题的唯一方法是在重写类内部创建一个到父类(super class)的调用路径,这就是我上面通过定义 superHello 方法所做的。

[The interviewer] said "I am not convinced"

另一种可能是面试官希望您提供基于反射的解决方案,而这种解决方案只能在 Java 7+ 中实现。您需要使用 MethodHandle,使用基类调用 findSpecial,然后调用您返回的方法。

Here is a link to an answer that explains the process, and shows an example.

关于java - 调用父类(super class)的重写方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21536682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com