什么是泛型?
< E >:参数化类型,定义类的时候不确定类型,使用类时才确定类型
泛型类:泛型定义在类上面
public class Car <E> {
private E content; // 表示装的内容
public void setContent(E content) {
this.content = content;
}
public E getContent() {
return content;
}
public static <T> void show(T msg) {
System.out.println("msg = " + msg);
}
}
小结:
如何使用泛型类?
Car c2 = new Car<>();
类名<类型> 变量名 = new 类名<类型>();
泛型类的缺点:
泛型类在创建对象时,指定为什么类型就只能使用这种类型
泛型方法:泛型定义在方法上
public static <T> void show(T msg) {
System.out.println("msg = " + msg);
}
小结:
1.泛型方法的格式?
修饰符 <T> 返回值类型 方法名(T msg) {
}
和普通方法2点区别:
1.返回值类型前面添加<T>
2.参数列表中的类型变成T
2.泛型方法的好处?
可以传入任意类型
泛型接口:就是泛型定义在接口上
public class Demo04 {
public static void main(String[] args) {
// 1.定义实现类指定泛型,创建对象时就不需要指定类型
Student s = new Student();
s.show("爽");
// 2.定义类时沿用泛型,创建对象时就需要指定类型
Teacher<String> t = new Teacher<>();
t.show("abc");
Teacher<Integer> t2 = new Teacher<>();
t2.show(123);
}
}
class Teacher <E> implements Swimmable <E> {
@Override
public void show(E msg) {
System.out.println("老师游泳时说: " + msg);
}
}
class Student implements Swimmable <String> {
@Override
public void show(String msg) {
System.out.println("学生游泳时说: " + msg);
}
}
interface Swimmable <E> {
public abstract void show(E msg);
}
小结
1.泛型接口的格式?
interface 接口名 {
}
2.泛型接口的使用?
1).定义实现类指定泛型,创建对象时就不需要指定类型
2).定义类时沿用泛型,创建对象时就需要指定类型