子类强转父类以获取父类对象时被重写的静态方法的选择

子类强转父类,子类 z  = new 子类();
              父类 f  = (父类)z;
多态性的一种体现,通过子类对象获得父类对象(就好比儿子给父亲输血救命一样);但是尤其需
注意其中如果有静态方法的重写则取父类中的静态方法而非重写后的子类静态方法。
例如


public class Test {
public void a(){
System.out.println("a");
}
public static void b(){
System.out.println("b");
}
}
public class TestB extends Test{
public void a(){
System.out.println("c");
}
public static void b(){
System.out.println("d");
}
public static void main(String args[]){
TestB tb = new TestB();
Test t = (Test)tb;
t.a();
t.b();







}
}


最后输出的c ,b所以证明静态方法需取重写前的父类中原有的方法而普通方法则取到的是重写后的。
如果直接获得父类对象则输出a,b
直接获得子类对象输出c,d

你可能感兴趣的:(java)