黑马程序员技术交流社区

标题: 泛型的边界问题 [打印本页]

作者: Oh_JAVA    时间: 2016-8-2 20:04
标题: 泛型的边界问题
本帖最后由 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 怎么用啊~





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2