大部分都和C++中一样,主要注意泛型和多态相关的一部分内容
泛型与多态
泛型不具备继承性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import java.util.ArrayList;
public class GenericsDemo { public static void main(String[] args) { ArrayList<Ye> list1 = new ArrayList<>(); ArrayList<Fu> list2 = new ArrayList<>(); ArrayList<Zi> list3 = new ArrayList<>();
method(list1); method(list2); method(list3); }
public static void method(ArrayList<Ye> list){
} }
class Ye{}; class Fu extends Ye{}; class Zi extends Fu{};
|
泛型里面是什么,就得传什么
数据具有继承性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import java.util.ArrayList;
public class GenericsDemo { public static void main(String[] args) { ArrayList<Ye> list1 = new ArrayList<>(); ArrayList<Fu> list2 = new ArrayList<>(); ArrayList<Zi> list3 = new ArrayList<>();
list1.add(new Ye()); list1.add(new Fu()); list1.add(new Zi()); }
public static void method(ArrayList<Ye> list){
} }
class Ye{}; class Fu extends Ye{}; class Zi extends Fu{};
|
这样是可以的
泛型方法
1 2 3
| public static<E> void method(ArrayList<E> list) { }
|
在修饰符后面加入泛型,可以生成泛型方法
弊端:可以接受任意的数据类型
通配符限定范围
例如:
1 2 3
| public static void method(ArrayList<?> list) { }
|
? extends E:表示可以传递E或者E所有的子类类型
? super E:表示可以传递E或者E所有的父类类型
应用场景
- 在定义类、方法、接口的时候,如果类型不确定,就可以定义泛型类、泛型方法、泛型接口
- 如果类型不确定,但是之后只能传递某个继承体系里面的,可以使用泛型的通配符