例如,允许子类使用自己的类型很有用
想象一个像
class Node { Node next;}如果您扩展该类,则会陷入困境
Node。
class SpecialNode extends Node { void foo() { // euwww SpecialNode nextNode = (SpecialNode) this.next; }}您也不能像这样定义它
class Node<T> { T next;}因为这样可以做任何事情
T。您确实想要
T那个,
extendsNode否则您将无法
Node在
Node不进行强制转换的情况下从内部使用T。不过,它适用于儿童班。
通过使用递归边界
class Node<T extends Node<T>> { T next;}您将T限制为您自己或您自己的子类,然后您就可以
class SpecialNode extends Node<SpecialNode> { void foo() { SpecialNode nextNode = this.next; // type-safe! }}这样,父类和子类都可以完全抽象安全地访问其抽象级别上的所有内容。



