2013-02-23 110 views
1

我有两个类Foo和Bar,其中Bar扩展Foo。java注释不调用重写方法

在超类中,有一个方法f()。该子类重写此方法并有目的地抛出异常,以便从不在Bar的实例上调用f()。

class Foo { 
    public void f() { 
    // does something useful 
    } 

} 


class Bar extends Foo { 
    @Override 
    public void f() { 
     throw new UnsupportedOperationException("Srsly, thou shalt not"); 
    } 
} 

现在,这里是我的问题:是有一些注释,我可以说,以通信的IDE,比如Eclipse,人们不应该把它重写的方法使用?我发现自己希望轻微滥用@deprecated标记,以便Eclipse 中的自动完成列表在用户正在处理Bar实例时穿过 的方法,但我想知道是否有更好的选项。

class Bar extends Foo { 

    /** 
    * @deprecated 
    */ 
    @Override 
    public void f() { 
     throw new UnsupportedOperationException("Srsly, thou shalt not"); 
    } 
} 
+1

'UnsupportedOperationException'似乎是最近的事情,但我不认为有注释。 – Boann 2013-02-23 02:23:40

+0

你想要打电话的预期方法是什么?如果是使用super关键字调用超类方法。 – Jayamohan 2013-02-23 02:28:52

+0

@Boann我认为可能是这样。如果没有人能够理解这个问题,你应该把你的评论粘贴到答案中。 – pohl 2013-02-23 02:49:18

回答

-2

无不是真的在Java中所有的(非静态)方法是虚拟和调用在运行时解析。换句话说,编译器无法检测到Bar的版本的方法将在运行时被调用。

+0

我知道你的答案不包含任何不真实的陈述。他们是否以某种方式涉及这个问题? – pohl 2013-03-07 21:51:53

-2

我会使函数f()私有。 那样的话,它永远不会被叫到酒吧外面。