泛型总的来说,指不确定的类型
其中掐面三个不叫泛型,但是类似泛型;后面一个代指一些不确定类型是泛型(差不多和模板类似)。
1.下面用到了一个泛型的示例:
/*
* 泛型
*/
public class Test {
public static void main(String args[]){
Person per[]=new Person[5];
per[0]=new Student();
per[1]=new Employee();
((Student) per[0]).print();
((Employee) per[1]).print();
}
}
class Person{
}
class Employee extends Person{
public void print(){
System.out.println("i am employee");
}
}
class Student extends Person{
public void print(){
System.out.println("i am Studnent");
}
}
其中Person就是泛型类.
2.依次类推大家用到Object超类时也是用到了泛型(就是可以代指一切,但是不能代指基本数据类型,这也是为什么要将基本数据类型进行封装称对应的封装类)。
3.还有大家用到的接口(只有实现了这个接口,才可以用这个接口的泛型),如下面示例:
/*
* 泛型
*/
public class Test {
public static void main(String args[]){
Area area[]=new Area[4];
area[0]=new circle(3);
area[1]=new SanJiao(3,4);
area[2]=new BuPi();
System.out.println(area[0].getArea());
System.out.println(area[1].getArea());
System.out.println(area[2].getArea());
}
}
interface Area{
public float getArea();
}
/*
* 形状的基类
*/
class Shape{}
/*
* 这是圆形
*/
class circle extends Shape implements Area{
private int r;
public circle(int r){
this.r=r;
}
public float getArea() {
// TODO Auto-generated method stub
return (float) (3.14*r*r);
}
}
/*
* 这是三角形
*/
class SanJiao extends Shape implements Area{
private int l;
private int h;
public SanJiao(int l,int h){
this.l=l;
this.h=h;
}
public float getArea() {
// TODO Auto-generated method stub
return h*l/2;
}
}
/*
* 这是一张布匹,他也有面积
*/
class BuPi implements Area{
public float getArea() {
// TODO Auto-generated method stub
return 5;
}
}
4.用模板的方式来运用泛型:
java的模板类可以理解为含有Object类型的类。
<1. java的模板类的模板参数只能是参数类型,成员变量类型等,模板名是确定的。
<2. 运行期,模板参数会被当作Object来处理,已经验证
<3. 使用模板类的类型安全,只是利用编译器的类型检查,来自动保证运行期的类型强转的正确与安全。
示例如下: