大部分都和C++中一样,主要注意泛型和多态相关的一部分内容
泛型与多态
泛型不具备继承性
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);//error
method(list3);//error
}
public static void method(ArrayList<Ye> list){
}
}
class Ye{};
class Fu extends Ye{};
class Zi extends Fu{};
泛型里面是什么,就得传什么
数据具有继承性
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);//error
// method(list3);//error
.add(new Ye());
list1.add(new Fu());
list1.add(new Zi());
list1}
public static void method(ArrayList<Ye> list){
}
}
class Ye{};
class Fu extends Ye{};
class Zi extends Fu{};
这样是可以的
泛型方法
public static<E> void method(ArrayList<E> list) {
}
在修饰符后面加入泛型,可以生成泛型方法
弊端:可以接受任意的数据类型
通配符限定范围
?
:表示不确定的类型,可以放在泛型里面
例如:
public static void method(ArrayList<?> list) {
//此时不用在修饰符后面显式标注泛型
}
? extends E
:表示可以传递E
或者E
所有的子类类型? super E
:表示可以传递E
或者E
所有的父类类型
应用场景
- 在定义类、方法、接口的时候,如果类型不确定,就可以定义泛型类、泛型方法、泛型接口
- 如果类型不确定,但是之后只能传递某个继承体系里面的,可以使用泛型的通配符