泛型
泛型指的就是一种类型,泛型一般都跟<>使用,例如< String>,就代表这是String类型的,一般联合集合使用List< Student>代表Student类型的集合
泛型类
//注意这里PPP只是相当于一个"形参"在外界可以给PPP任何一个类型
public class generic<PPP> {
PPP p;
//来一个有参构造,给需要传递一个类型,在外界,可以传任何类型,Student类,worker类
public generic(PPP p) {
super();
this.p = p; //将p赋值为外界传来的对象
}
//需要注意的是:虽然p是外界传进来的对象,但这个对象的方法是调用不到的,只能使用
//所有类的父类Object里的方法
public void showEat() {
System.out.println(p.toString());
}
}
泛型方法
public class GenericityMethod {
// 这就是泛型方法的书写格式,当外界调用这个方法时,
// 可以传进来任何类型的对象
public <PPP> void run(PPP p) {
System.out.println(p.toString());
}
public static void main(String[] args) {
GenericityMethod g = new GenericityMethod();
// 在本包的创建了两个类
Student s = new Student();
Worker w = new Worker();
// PPP只是一个形式,就是告诉你,想要调用这个方法就要
// 传递进来一个对象,什么对象都行
g.run(s);
g.run(w);
}
}
注意:这里需要和多态进行一个区别,这俩都是可以传递进来一个不同的对象,需要主要的是多态传进的对象可以调用这个对象的方法,而泛型方法传进来的对象是不能调用这个对象的方法的,只能调用所有父类Object类的方法!!!!!
泛型通配符
对于一个泛型类,为了规范可传入的类型这产生了一个泛型通配符
来一个泛型类
public class generic<PPP> {
PPP p;
public generic(PPP p) {
super();
this.p = p;
}
public void showEat() {
System.out.println(p.toString());
}
}
这里还有一个Person父类,以及Person的两个子类就不写了
public class GenericityMethod {
// 这就是泛型方法的书写格式,当外界调用这个方法时,
// 可以传进来任何类型的对象
//这里?代表所有的意思
//? extends Person 所有继承Person的子类
//则这个泛型类只有继承Person的子类可以将对象传递不去
//不在是没有通配符时所有的对象都可以传递进去
public void run(generic<? extends Person> p) {
p.showEat();
}
public static void main(String[] args) {
GenericityMethod g = new GenericityMethod();
Worker w = new Worker();
Student s = new Student();
generic<Worker> gt = new generic<Worker>(w);
generic<Student> gt2 = new generic<Student>(s);
g.run(gt);
g.run(gt2);
}
}