相关疑难解决方法(0)

声明最终的静态方法是一个坏主意吗?

我理解在这段代码中:

class Foo {
    public static void method() {
        System.out.println("in Foo");
    }
} 

class Bar extends Foo {
    public static void method() {
        System.out.println("in Bar");
    }
}
Run Code Online (Sandbox Code Playgroud)

..静态方法Bar'隐藏'声明的静态方法Foo,而不是在多态意义上覆盖它.

class Test {
    public static void main(String[] args) {
        Foo.method();
        Bar.method();
    }
}
Run Code Online (Sandbox Code Playgroud)

...将输出:

在Foo
in Bar

重新定义method()为final在Foo将禁用的能力Bar,以隐藏它,并重新运行main()将输出:

在Foo
的Foo

(编辑:将方法标记为时编译失败final,并且仅在删除时再次运行Bar.method())

将静态方法声明为final有意或无意地重新定义方法的子类是否被认为是不好的做法?

(这是对使用行为的一个很好的解释final..)

java methods static final

37
推荐指数
4
解决办法
3万
查看次数

标签 统计

final ×1

java ×1

methods ×1

static ×1