Java 中的每个方法都可以重写吗?我知道在 C# 中定义为 virtual 的方法可以被覆盖,这是如何在 Java 中实现的?

最佳答案

并非每个方法都是可重写的:您不能覆盖finalprivatestatic的方法。

以下是这实际上意味着什么的一小部分示例:

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方法更改为publicprotected仍将不允许您覆盖它。

10-08 00:36