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();
}
}