静态方法可以被覆盖。 静态内部类也可以被覆盖。class Father { Father() { System.out.println("Father constuctor"); }
public static void SF() { System.out.println("Father.SF()"); }
public static class InClass { public static int a=10; } } class Son extends Father { Son() { System.out.println("Son constructor"); }
public static void SF() { System.out.println("Son.SF()"); } public static class InClass { public static int a=12; }
}public class TFS { public static void main(String[] args) { Father f=new Father(); Son s=new Son(); System.out.println(Father.InClass.a); Father.SF(); Son.SF(); System.out.println(Son.InClass.a);
其实static并没有被override,上面的例子看上去是被override了,但实际没有,因为 static 只归他自己的当前类。他是隐藏的。 static静态的不能被覆写,也不能重栽,所以它也不能实现多态。 为什么呢? 因为静态的是隐藏的,它只属于当前类用。所以楼主切记。 无论是什么,只要是静态的,就符合此条件。 如: class father{
public static void go(){system.out.println("fath");} } class son extend father{ public void go(){system.out.println("son"); } public class example{ public static void main(String[] args) { Father f=new Father(); Son s=new Son(); f.go();//他输出的是fath s.go(); //输出 son } //他们自己输出自己的。 } 还有楼主需要记住一点,覆盖和重载判断标准是函数头,和参数表。 并不是象: static,void ,private...等等。
静态内部类也可以被覆盖。class Father
{
Father()
{
System.out.println("Father constuctor");
}
public static void SF()
{
System.out.println("Father.SF()");
}
public static class InClass
{
public static int a=10;
}
}
class Son extends Father
{
Son()
{
System.out.println("Son constructor");
}
public static void SF()
{
System.out.println("Son.SF()");
} public static class InClass
{
public static int a=12;
}
}public class TFS
{
public static void main(String[] args)
{
Father f=new Father();
Son s=new Son();
System.out.println(Father.InClass.a);
Father.SF();
Son.SF();
System.out.println(Son.InClass.a);
}
}
你写几个例子就明白了
所以说不能.
static静态的不能被覆写,也不能重栽,所以它也不能实现多态。
为什么呢?
因为静态的是隐藏的,它只属于当前类用。所以楼主切记。
无论是什么,只要是静态的,就符合此条件。
如:
class father{
public static void go(){system.out.println("fath");}
}
class son extend father{
public void go(){system.out.println("son");
}
public class example{
public static void main(String[] args)
{
Father f=new Father();
Son s=new Son();
f.go();//他输出的是fath
s.go(); //输出 son
} //他们自己输出自己的。
}
还有楼主需要记住一点,覆盖和重载判断标准是函数头,和参数表。
并不是象: static,void ,private...等等。