在不更改代码的情况下调用父类方法

问题描述:

请考虑下面的代码片段。在不更改代码的情况下调用父类方法

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()方法,而无需修改代码?或者我问的是不可能的?

+0

我想有一个基于反射的答案,但它可能是最好的*不*要想做到这一点! – 2011-05-26 09:57:01

+0

是的,我知道..我在技术性的采访中被问到了这一点,并且让我难住了。 – harihb 2011-05-26 10:02:09

从外面看,你不能 - 这会违反封装。 (想象一下toString()实际上是一种改变对象状态的方法,并且子类想强制执行一些约束 - 您不应该跳过这些约束。)您可以从X本身(例如,

public String toString() { 
    return super.toString() + "Hi"; 
} 
+0

噢,在面试时我被问到了这个问题,当我告诉我会使用超级关键字时,面试官不同意我的看法。不管怎样,谢谢:) – harihb 2011-05-26 09:59:33