编程其实就是一个将具象世界进行抽象化(Abstraction)的过程, 多态就是抽象化的一种体现.多态, 我认为就是把一系列具体事物的共同点抽象出来, 再通过这个抽象的事物, 与不同的具体事物进行对话.比如, 你的老板让所有员工在九点钟开始工作, 他只要在九点钟的时候说"开始工作"即可, 而不需要对销售人员说"开始销售工作", 对技术人员说"开始技术工作", 因为"员工"是一个抽象的事物, 只要是员工就可以开始工作, 他知道这一点就行了. 至于每个员工, 当然会各司其职, 做各自的工作. 这就是多态.
import java.util.*;public class IteratorTest
{
public static void main(String[] args)
{
Book b1 = new Book("isbn-7-111","Thinking in Java","Bruce Eckel");
Book b2 = new Book("isbn-7-5382","The Moments","Jimmy");
Book b3 = new Book("isbn-7-5004","Class","Paul Fussell");
Book b4 = new Book("isbn-7-5600","The Scarlet Letter","Nathaniel Hawthorne");
Book b5 = new Book("isbn-7-5611","The Portrait Of a Lady","Henry James");
Book b6 = new Book("isbn-7-302-06986-7","Programming With J2me","Alex Wen");
ArrayList al = new ArrayList();
al.add(b1);
al.add(b2);
al.add(b3);
al.add(b4);
al.add(b5);
al.add(b6);
Iterator iterator = al.iterator();
while(iterator.hasNext())
{
System.out.println((Book)iterator.next());
}
}
}
class Book
{
private String isbn,title,author;
public Book(String isbn,String title,String author)
{
this.isbn = isbn;
this.title = title;
this.author = author;
}
public String getIsbn()
{
return isbn;
}
public String getTitle()
{
return title;
}
public String getAuthor()
{
return author;
}
public String toString()
{
return"[isbn="+isbn+",title="+title+",author="+author+"]";
}
} 这是新东方教程上的例子,关于集合的。我的问题也是关于多态的问题:
1:这一句:ArrayList al = new ArrayList();//1
我写成List a1 = new ArrayList();//2
也可以实现同样功能。原理我明白,是将子类直接转换成父类,但在实际工作中,在什么情况下用1什么情况下用2呢?
2:System.out.println((Book)iterator.next());//1
我写成System.out.println(iterator.next());//2
也可以完成同样的功能。我明白iterator.next()返回的是一个object对象,由于返回的对象是基于Book类的,所以做了一个强制转换。但是如果我去掉(Book),不也是一个String对象吗,也是object的子类啊?请高手帮助一下吧!