</pre>最近看到一个很久以前的帖子,关于静态方法的继承 ,我认真看了下,大多人认为静态方法可以继承,但不能被覆盖。<p></p><p>我认为 应该先考虑静态方法是静态绑定,静态绑定是编译时就已经绑定,静态方法主要和类有关系,但类的所有对象也都可以调用。</p><p>我关于静态方法看法 </p><p> 由于类的关系,编译时已经绑定到类上了,也可以说绑定到引用上了,并且首先考虑</p><p></p><pre name="code" class="java">public class Text {
public static void main(String args[]){
A a = null; // 给个空对象
a.a(); // 一样可以调用 静态方法 输出 a
a = new B();// 给个子类对象
a.a(); // 一样调用自己的 静态方法 输出 a
}
}
class A{
public static void a(){
System.out.println("a");
}
}
class B extends A{
public static void a(){
System.out.println('b');
}
}
</pre> 但静态方法到底能不能继承呢?<p></p><pre name="code" class="html">public class StaticExtends extends S{ //对象可以调用静态方法
void fun(){
<span style="white-space:pre"> </span>f(); //这里的方法调用看到 静态方法是可以继承的
}
public static void main(String args[]){
new StaticExtends().fun(); //输出 a
}
}
class S{
static void f(){
System.out.println("a");
}
}
静态方法可以继承 可以覆盖么?
public class StaticExtends extends S{
void fun(){
f(); //这里的方法调用看到 静态方法是可以*覆盖*的
}
static void f(){
System.out.println("s");
}
public static void main(String args[]){
new StaticExtends().fun(); //输出 s
}
}
class S{
static void f(){
System.out.println("a");
}
}