声明一个泛型类
class People<E>
People是泛型类的名称
E为泛型,他可以是任意的对象或接口,但不能是基本类型
使用泛型类声明一个对象
Cone<Circle> coneOne = new<Circle>(new Circle);/*泛型类声明对象时必须要用具体的类代替泛型*/
实例:求椎体的体积
对于椎体的体积,我们并不关心他的地面具体是怎样的形状,关心的是用底面积和高计算出他的体积。
因此,定义一个泛型锥体类,bottom类型为泛型。
Cone.java /*使用泛型类声明椎体对象*/ public class Cone<E> { double height; E bottom; public Cone(E b){/*泛型类E声明对象bottom*/ bottom=b; } public void setHeight(double h){ height = h; } public double computerVolume(){ /*泛型变量只能调用从Object类继承的或重写的方法*/ String s = bottom.toString();/*执行到这步时会调用具体类中重写的toString方法,泛型不能是基本类型, 所以先强制转化为String类型在转化为double类型进行计算*/ double area = Double.parseDouble(s); return 1.0/3.0*area*height; } }
底面的形状
Rect.java
public class Rect { double sideA,sideB,area; Rect(double a,double b){ this.sideA=a; this.sideB=b; } public String toString(){ area = sideA*sideB; return area+""; } } Circle.javapublic class Circle { double area,radius; Circle(double radius){ this.radius = radius; } /*bottom泛型类变量只能调用Object变量,所以Circle和Rectangle都重写了toString方法*/ public String toString() { area = radius*radius*Math.PI; return area+""; } }
测试类
Conepublic class ConeDemo { public static void main(String[] args) { Circle circle = new Circle(10); /*泛型类声明对象,一定要用具体的类替代<>中的泛型*/ /*Cone泛型的名称 <>泛型*/ Cone<Circle>coneOne = new Cone<Circle>(circle); coneOne.setHeight(16); System.out.println(coneOne.computerVolume()); Rect rect = new Rect(10,10); Cone<Rect>coneTwo = new Cone<Rect>(rect); coneTwo.setHeight(10); System.out.println(coneTwo.computerVolume()); } }