這篇博文不說(shuō)很多,直接上代碼。
import java.util.ArrayList;
import java.util.List;
/**
** @author ShunLi*/public class ExtendTest {public static void main(String[] args) {List<Person> pList = new ArrayList<Person>();
pList.add(new Person());
pList.add(new Person());
List<Animal> aList = new ArrayList<Animal>();
aList.add(new Animal());
doSomething(pList);doSomething(aList);}static void doSomething(List<? extends Base> obj){for (Base base : obj) {
base.doSomething();}}}interface Base{
void doSomething();
}class Person implements Base{public void doSomething() {System.out.println("Person");
}}class Animal implements Base{public void doSomething() {System.out.println("Animal");
}}////////////////////////////////////////////////////////////////
import java.util.ArrayList;
import java.util.List;
/**
** @author ShunLi*/abstract class Base {abstract void doSomething();}class Person extends Base {public void doSomething() {System.out.println("Person");
}}class Animal extends Base {public void doSomething() {System.out.println("Animal");
}}public class ExtendTest2 {public static void main(String[] args) {List<Person> pList = new ArrayList<Person>();
pList.add(new Person());
pList.add(new Person());
List<Animal> aList = new ArrayList<Animal>();
aList.add(new Animal());
doSomething(pList);doSomething(aList);}static void doSomething(List<? extends Base> obj) {for (Base base : obj) {
base.doSomething();}}}////////////////////////////////////////////////////////////////
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
** @author ShunLi*/abstract class Base {abstract void doSomething();}class Person extends Base {public void doSomething() {System.out.println("Person");
}}class Animal extends Base {public void doSomething() {System.out.println("Animal");
}}public class ExtendTest3 {public static void main(String[] args) {List<Base> bases = new ArrayList<Base>();
bases.addAll(getPersons());doSomething(bases);bases.clear();bases.addAll(getAnimals());doSomething(bases);doSomething(Arrays.<Base> asList(new Person(), new Animal()));doSomething(Arrays.asList(new Person(), new Animal()));
bases.clear();Collections.addAll(bases, new Person(), new Animal());doSomething(bases);}private static List<Animal> getAnimals() {List<Animal> aList = new ArrayList<Animal>();
aList.add(new Animal());
return aList;
}private static List<Person> getPersons() {List<Person> pList = new ArrayList<Person>();
pList.add(new Person());
pList.add(new Person());
return pList;
}static void doSomething(List<Base> obj) {for (Base base : obj) {
base.doSomething();}}}
得出一些結(jié)論(個(gè)人體會(huì),不保證正確):
1. 抽象類(lèi)抽象方法和接口差不多,而且個(gè)人以前沒(méi)有理解過(guò)的是在 ExtendTest中,也可以使用List<implement> –> List<? extends Base>,接口還是可以理解成繼承的;
2. ExtendTest3 中 Arrays.<Base> asList(new Person(), new Animal()) 這種寫(xiě)法還是從 《Thinking In Java》看到的,當(dāng)然你可以忽略中間<Base>這樣的書(shū)寫(xiě);
3. 其它。
順利寫(xiě)于2011年10月28日
博客中的一些下載已經(jīng)放到了百度云了,請(qǐng)根據(jù)需要下載。【點(diǎn)我去百度云下載】
最后弱弱地說(shuō)一下,如果可以的話,轉(zhuǎn)載請(qǐng)?zhí)峁┏鎏? ),謝謝。
