*非静态方法属于类的实例,是可以被子类重写,从而达到多态的效果; 静态方法属于类,是不能被重写,故而也不能实现多态。*
下面是具体的验证过程
首先,定义一个超类A,里边定义一个静态方法和一个非静态方法:
public class A { public void unstaticMethod() { System.out.println("SuperClass unstaticMethod"); } public static void staticMethod() { System.out.println("SuperClass staticMethod"); }}
接下来,定义一个子类B,里边定义一个静态方法和一个非静态方法(形式上像是重写了超类的方法):
public class B extends A { public void unstaticMethod() { System.out.println("SunClass unstaticMethod"); } public static void staticMethod() { System.out.println("SunClass staticMethod"); }}
在接下来,我们进行测试:
public class Test { @SuppressWarnings("static-access") public static void main(String[] args) { A a = new A(); A a2 = new B(); a.unstaticMethod(); a2.unstaticMethod(); a.staticMethod(); a2.staticMethod(); }}
运行结果:
SuperClass unstaticMethodSunClass unstaticMethodSuperClass staticMethodSuperClass staticMethod
从运行结果,我们可以知道,对于非静态方法,实现了多态的效果,而静态方法却没有。
有理想在的地方,地狱就是天堂