📜  Java中静态函数的阴影(方法隐藏)

📅  最后修改于: 2020-03-19 13:34:26             🧑  作者: Mango

在Java中,如果派生类静态函数的名称与基类静态函数的名称相同,则基类静态函数会遮盖(或隐藏)派生类静态函数。例如,以下Java代码显示“ A.fun()”。

注意:静态方法是类的属性,因此,如果从具有类名或对象中调用静态方法,则该类方法会被调用,对象的方法将不被调用。

// 文件名: Main.java
// 父类
class A {
    static void fun()
    {
        System.out.println("A.fun()");
    }
}
// 继承A
class B extends A {
    static void fun()
    {
        System.out.println("B.fun()");
    }
}
// 测试代码
public class Main {
    public static void main(String args[])
    {
        A a = new B();
        a.fun(); // prints A.fun();
        // B a = new B();
        // a.fun(); // 会打印 B.fun()
        // 变量类型决定了要调用的方法,而不是分配的对象类型。
    }
}

输出:

A.fun()

注意:如果我们同时将A.fun()和B.fun()设为非静态,则上述程序将打印“ B.fun()”。虽然这两种方法都是静态类型,但变量类型决定了要调用的方法,而不是分配的对象类型。