在不更改代码的情况下调用父类方法
问题描述:
请考虑下面的代码片段。在不更改代码的情况下调用父类方法
class X {
public String toString() {
return "Hi";
}
}
public class Main {
public static void main(String[] args) {
Object obj = new X();
System.out.println(obj.toString());
}
}
我现在该如何调用Object类中的toString()方法,而无需修改代码?或者我问的是不可能的?
答
从外面看,你不能 - 这会违反封装。 (想象一下toString()
实际上是一种改变对象状态的方法,并且子类想强制执行一些约束 - 您不应该跳过这些约束。)您可以从X
本身(例如,
public String toString() {
return super.toString() + "Hi";
}
+0
噢,在面试时我被问到了这个问题,当我告诉我会使用超级关键字时,面试官不同意我的看法。不管怎样,谢谢:) – harihb 2011-05-26 09:59:33
我想有一个基于反射的答案,但它可能是最好的*不*要想做到这一点! – 2011-05-26 09:57:01
是的,我知道..我在技术性的采访中被问到了这一点,并且让我难住了。 – harihb 2011-05-26 10:02:09