Java泛型编程中使用extends关键字指定泛型参数类型的上边界(后面还会讲到使用super关键字指定泛型的下边界),即泛型只能适用于extends关键字后面类或接口的子类。
Java泛型编程的边界可以是多个,使用如<T extends A & B & C>语法来声明,其中只能有一个是类,并且只能是extends后面的第一个为类,其他的均只能为接口(和类/接口中的extends意义不同)。
使用了泛型边界之后,泛型对象就可以使用边界对象中公共的成员变量和方法。
interface HasColor{
  java.awt.Color getColor();
}
class Colored<T extends HasColor>{
  T item;
  Colored(T item){
     this.item = item;
}
java.awt.Color color(){
   //调用HasColor接口实现类的getColor()方法
   return item.getColor();
}
}
class Dimension{
   public int x, y, z;
}
Class ColoredDimension<T extends Dimension & HasColor>{
  T item;
  ColoredDimension(T item){
     this.item = item;
}
T getItem(){
   return item;
}
java.awt.Color color(){
   //调用HasColor实现类中的getColor()方法
   return item.getColor();
}
//获取Dimension类中定义的x,y,z成员变量
int getX(){
   return item.x;
}
int getY(){
   return item.y;
}
int getZ(){
   return item.z;
}
}
interface Weight{
   int weight();
}
class Solid<T extends Dimension & HasColor & Weight>{
  T item;
  Solide(T item){
     this.item = item;
}
T getItem(){
   return item;
}
java.awt.Color color(){
   //调用HasColor实现类中的getColor()方法
   return item.getColor();
}
//获取Dimension类中定义的x,y,z成员变量
int getX(){
   return item.x;
}
int getY(){
   return item.y;
}
int getZ(){
   return item.z;
}
int weight(){
   //调用Weight接口实现类的weight()方法
   return item.weight();
}
}
class Bounded extends Dimension implements HasColor, Weight{
   public java.awt.Color getColor{
     return null;
}
public int weight(){
   return 0;
}
}
public class BasicBounds{
   public static void main(String[] args){
    Solid<Bounded> solid = new Solid<Bounded>( new Bounded());
    solid.color();
    solid.getX();
    solid.getY();
    solid.getZ();
    solid.weight();
}
}