本帖最后由 Oh_JAVA 于 2016-8-2 20:16 编辑
[AppleScript] 纯文本查看 复制代码 interface Weight {
int weight();
}
class Dimension {
public int x, y, z;
}
class Solid<T extends Dimension & Weight> {
T item;
Solid(T item) {
this.item = item;
}
int getX() {
return item.x;
}
int weight() {
return item.weight();
}
}
class Bounded extends Dimension implements Weight {
public int weight() {
return 0;
}
}
public class Test_15_extends {
public static void main(String[] args) {
Solid<Bounded> solid = new Solid<Bounded>(new Bounded());
System.out.println(solid.weight());
}
}
java泛型是使用擦除来实现的,将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。
那么这样子extends后面多个有什么用呢?不是都被顶级父类型替换,如上面代码Solid类应该替换为
[AppleScript] 纯文本查看 复制代码 Dimension item;
Solid(Dimension item) {
this.item = item;
}
这样替换掉后,为什么还能调用 weight() 方法呀?
求解,这个 extends 怎么用啊~
|