A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Oh_JAVA 中级黑马   /  2016-8-2 20:04  /  580 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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 怎么用啊~

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马