package com.citi.jdk5;
public class FanxingTest {
public static void main(String[] args) {
Fanxing<String> f = new Fanxing<String>("Testing");
Fanxing<Integer> i = new Fanxing<Integer>(123);
Fanxing<Object> o = new Fanxing<Object>(new Object());
Fanxing<Number> n = new Fanxing<Number>(2345);
System.out.println("String>>>>>>:" + f.getData());
System.out.println("Integer>>>>>>:" + i.getData());
System.out.println("Object>>>>>>:" + o.getData());
System.out.println("-------------返回此 Object 的运行时类。--------------------------");
System.out.println("String>>>>>>:" + f.getClass());
System.out.println("Integer>>>>>>:" + i.getClass());
System.out.println("Object>>>>>>:" + o.getClass());
System.out.println("-------------?>>>getData--------------------------");
getData(n);
getData(i);
getData(f);
System.out.println("-------------?>>>getUpperNumberData--------------------------");
getUpperNumberData(n);
getUpperNumberData(i);
// getUpperNumberData(f);
System.out.println("-------------?>>>getLowerNumberData--------------------------");
getUpperNumberData(n);
getUpperNumberData(i);
// getUpperNumberData(f);
Fanxing<Student> s = new Fanxing<Student>(new Student());
Fanxing<Teacher> t = new Fanxing<Teacher>(new Teacher());
Fanxing<StudentLeader> sl = new Fanxing<StudentLeader>(new StudentLeader());
Fanxing<Animal> animal = new Fanxing<Animal>(new Animal());
Fanxing<AnimalFly> fa = new Fanxing<AnimalFly>(new AnimalFly());
Fanxing<PeopleFly> fp = new Fanxing<PeopleFly>(new PeopleFly());
System.out.println("-------<? Extends People>>>>Object Fatcher and Child Testing--------------------------");
getUpperStudentData(s);
getUpperStudentData(t);
getUpperStudentData(sl);
// getUpperStudentData(animal);
System.out.println("-------<? Super Student>>>>Object Fatcher and Child Testing--------------------------");
getLowerStudentData(s);
// getLowerStudentData(t);
getLowerStudentData(sl);
// getLowerStudentData(animal);
System.out.println("-------<? Super Student>>>>Inteface 实现类--------------------------");
getUpperFlyData(fa);
getUpperFlyData(fp);
}
//类型实参
public static void getData(Fanxing<?> data) {
System.out.println("data :" + data.getData());
}
//如果需要定义一个功能类似于getData()的方法,但对类型实参又有进一步的限制:只能是Number类及其子类。此时,需要用到类型通配符上限。
public static void getUpperNumberData(Fanxing<? extends Number> data){
System.out.println("?ExtendsNumber>>>"+ data.getData());
}
public static void getLowerNumberData(Fanxing<? super Number> data){
System.out.println("?SuperNumber>>>"+ data.getData());
}
//类型通配符上限,只有People自己和其子雷才能传入
public static void getUpperStudentData(Fanxing<? extends People> data){
System.out.println("?Extends>>>"+ data.getData());
}
//类型通配符下限,StudentLeader自己和其父类才能传入
public static void getLowerStudentData(Fanxing<? super StudentLeader> data){
System.out.println("?Extends>>>"+ data.getData());
}
//类型通配符上限,只有Fly的实现类才能传入
public static void getUpperFlyData(Fanxing<? extends Fly> data){
System.out.println("?Inteface>>>"+ data.getData());
}
}
//--------------------------范型类--------------------------
package com.citi.jdk5;
public class Fanxing <T>{
private T data;
public Fanxing(){
}
public Fanxing(T data){
this.data=data;
}
public T getData(){
return data;
}
}