为什么不能覆盖静态方法?
如果可能,请举例说明.
请考虑以下代码:
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)
对我来说,这些情况是一样的.但编译器错误不同 …