为什么任何类型的EXTENDS接口?

时间:2013-04-29 07:06:32

标签: java interface polymorphism extends parameterized

今天我迷失了Java多态性。我做过一些我认为不可能完成的事情。即 - 我有EXTENDED界面。

我创建了空接口:

public interface Figure {}

现在没什么新鲜事。然后我创建了带有参数的参数化类板,它扩展了我的界面!

public class Board< T extends Figure > { 
    T[][] board;
}

我认为这是不可能的!然而,由于我不理解,我走得更远了。

我创建了实现Figure接口的类:

public class Cross implements Figure{}

令我惊讶的是,我能够做到这一点:

Board b = new Board<Cross>();

请帮帮我解释一下这种奇怪的情况。
我对多态性了解不多,我知道Cross就是图。 令我感到困惑的是,任何类型的EXTEND接口都是如此,并且实现了交互式(不扩展接口)的方法类是正确的,因为参数扩展了接口。

请帮助我解释这个多态的混乱。感谢。

3 个答案:

答案 0 :(得分:1)

当您说public class Board< T extends Figure >时,表示理事会可以接受FigureFigure的子接口或任何实现这些接口的类。所以,当你说:

public class Cross implements Figure{}

Board b = new Board<Cross>();

这意味着Cross已实施Figure,因此Board可以接受Cross,因为Cross IS-A Figure

就扩展接口而言,只有接口可以扩展接口。所以,以下是合法的:

public interface TwoDimensionalFigure extends Figure{}.

因此TwoDimensionalFigure也可以接受任何实现Board的类。

答案 1 :(得分:1)

通过

public class Board< T extends Figure > { 
    T[][] board;
}

您正在创建一个有界泛型类型T,其类型类型的超类 <{1}}

正如this主题中所解释的那样,定义扩展 接口的泛型类型之间没有区别

编译器确保在创建Figure时,Board将提供Textends Figure

的任何具体类

答案 2 :(得分:0)

实际上你没有扩展界面。您只需创建一个Cross类型的泛型类。你的类的定义只是指定参数化类型必须从图中派生出来,即实现图或它的衍生物。