当前位置: 技术问答>java相关
final定义的方法是不是不允许子类重载的
来源: 互联网 发布时间:2015-02-22
本文导语: | JAVA允许你扩展一个类派生另一个类,当子类扩展父类时,该子类可以超越其父类的方法,在有些情况下,你可能想阻止子类超越一个指定的方法,当你把一个类方法申明为final时,另一个类就不能超越这个方法...
|
JAVA允许你扩展一个类派生另一个类,当子类扩展父类时,该子类可以超越其父类的方法,在有些情况下,你可能想阻止子类超越一个指定的方法,当你把一个类方法申明为final时,另一个类就不能超越这个方法。为了把方法申明成final方法,只需在该方法头前加final 关键字即可。
|
补充一点,这个问题还是要涉及到namespace(叫scope更加确切一点)的问题。我现在举一个例子:
class base{
private final void disp(){}
}
class dervied extends base{
private final void disp(){}
}
这个例子中,这样写就没有任何问题的。这个例子如何解释呢:
(1)variable and method都是有生存空间的,同时也存在在子空间可见不可见的问题。
(比如这里的base和dervied)
(2)要是在同一生存空间不可见的话,前面所说不能超越的说法就不成立的。
比如我举的这个例子。
(3)因为base的 disp()在dervied中是不可见的。
class base{
private final void disp(){}
}
class dervied extends base{
private final void disp(){}
}
这个例子中,这样写就没有任何问题的。这个例子如何解释呢:
(1)variable and method都是有生存空间的,同时也存在在子空间可见不可见的问题。
(比如这里的base和dervied)
(2)要是在同一生存空间不可见的话,前面所说不能超越的说法就不成立的。
比如我举的这个例子。
(3)因为base的 disp()在dervied中是不可见的。
|
是的,被声明为final的方法是不允许被覆盖,即被子类或其他覆盖(overlaod)
|
private 的根本没有覆盖的问题