关于"多态"static方法的理解

来源:互联网 发布:java 红黑树原理 编辑:程序博客网 时间:2024/04/30 14:57

 要强调的是,多态性只发生于方法,而不发生于域.并且,对于方法,只有那些非static与非final方法才具有多态性.

这里讨论的是static方法不能发生多态.值得注意的是,所谓的static方法不能多态指的是:override的方法本身是不是static的,而不是指调用override方法的方法是不是static的!
比如以下程序:

 

class Father 
    
public void act() 
        System.out.println(
"Father.act()"); 
    }
 
}
 

class Son extends Father 
    
public void act() 
        System.out.println(
"Son.act()"); 
    }
 
}
 
public class Test 
    
public static void test(Father i) 
        i.act(); 
    }
 
    
public static void main(String[] a)
        Son son 
= new Son(); 
        test(son); 
    }
 
}
 

输出结果为:Son.act(),如果static不能多态,那结果不就应该是Father.act()吗?

其实,就象上面说的.我们要考虑的是的act()方法是不是static,有没有多态,而不是调用的方法test()是不是static的.
这跟test方法是否static无关,若把两个act方法都修改成static,则输出结果就是Father.act(),因为static方法不能多态.