Java 中的每个方法都可以重写吗?我知道在 C# 中定义为 virtual 的方法可以被覆盖,这是如何在 Java 中实现的?
最佳答案
并非每个方法都是可重写的:您不能覆盖final
,private
和static
的方法。
以下是这实际上意味着什么的一小部分示例:
class Base {
public final void fun1() {
}
private void fun2() {
System.out.println("Base::fun2");
}
public void fun2Call() {
fun2();
}
}
class Rextester extends Base
{
/*
@Override
public void fun1() { // compile error, because Base::fun1 is final
}
*/
// if @Override is uncommented, it will protect you from overriding private methods
// otherwise you will not get any compile time error.
//@Override
private void fun2() {
System.out.println("Rextester::fun2");
}
public static void main(String args[])
{
Base b = new Rextester();
b.fun2Call(); // will output Base::fun2,
// if you change private to protected or public
// then you will see Rextester::fun2 in output
}
}
我认为
static
方法覆盖与private
方法覆盖相同,至少您会得到类似的行为。当然,将static
方法更改为public
或protected
仍将不允许您覆盖它。