相关疑难解决方法(0)

为什么Java不允许覆盖静态方法?

为什么不能覆盖静态方法?

如果可能,请举例说明.

java static static-methods overriding

519
推荐指数
14
解决办法
26万
查看次数

为什么静态方法不涉及多态(后期绑定)我看到错误,静态方法不能被覆盖

请考虑以下代码:

class A{
    public static void m(Number n){
         System.out.println("Number A");
    };
}
class B extends A{
     public static int m(Number n){
        System.out.println("Number B");
        return 1;
      };
}
Run Code Online (Sandbox Code Playgroud)

输出:

java中的:inheritanceTest.B中的m(java.lang.Number)不能覆盖inheritanceTest中的m(java.lang.Number).返回类型int与void不兼容

我知道静态方法不涉及多态,因此我推断我的代码不可能覆盖.这个编译器消息对我来说很奇怪.

据我所知,重写是多态的一部分.我准备scjp,我害怕在熟悉的问题上犯错误.

请澄清这个问题.

我的预期行为 - 有关重载错误的消息

P.S1.

我已经阅读了关于静态覆盖的最受欢迎的问题,我没有找到答案(

P.S2. 据Pshemo回答:

这段代码:

class Foo{
    public static void m(Number n){
         System.out.println("Number A");
    };
    public static int m(Number n){
        System.out.println("Number B");
        return 1;
    };
}
Run Code Online (Sandbox Code Playgroud)

输出:

error: method m(Number) is already defined in class Foo
    public static int m(Number n){
                      ^
1 error
Run Code Online (Sandbox Code Playgroud)

对我来说,这些情况是一样的.但编译器错误不同 …

java polymorphism inheritance static overriding

8
推荐指数
2
解决办法
200
查看次数