大家可能对使用多态性(向上转型)来实例化对象应该很熟悉吧?特别是在类集中,比如List<T> list = new ArrayList<T> ();但是大家有没有想过在什么情况下使用多态性(向上转型)来实例化才是正确的呢?
答案就是:当你在整个程序中所用到的方法都存在于父类和子类当中,简单就是只有那些被子类覆写了父类的那些方法才可以调用
以下程序是无法通过编译的(因为在Vector子类中存在elements()方法,而在List中是不存在的,所以必须通过Vector<T> list = new Vector<String> ()实例化)
e:/java>javac EnumerationDemo.java
EnumerationDemo.java:9: 找不到符号
符号: 方法 elements()
位置: 接口 java.util.List<java.lang.String>
Enumeration<String> enu = allList.elements ();
^
1 错误
- import java.util.Enumeration ;
- import java.util.List ;
- import java.util.Vector ;
- public class EnumerationDemo{
- public static void main (String[] args){
- List<String> allList = new Vector<String> ();
- allList.add ("A");
- allList.add ("hello");
- Enumeration<String> enu = allList.elements ();
- while (enu.hasMoreElements ()){
- System.out.print (enu.nextElement ()+"、");
- }
- }
- }