[英]Why any type can EXTENDS interface?
今天我迷失了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接口,并且实现交互式(不扩展接口)的howcome类是正确的,作为扩展接口的paramether。
请帮助我解释这个多态的混乱。 谢谢。
当你说public class Board< T extends Figure >
,这意味着董事会可以接受Figure
或子接口Figure
或实现这些接口的类。 所以,当你说:
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
接受。
通过做
public class Board< T extends Figure > {
T[][] board;
}
您正在创建一个有界泛型类型, T
应该具有类型为 Figure
超类
正如本主题中所解释的那样,定义扩展 接口或类的泛型类型之间没有区别。
编译器确保的是,当您创建Board
, T
将提供任何具体的类,可以extends Figure
或implements Figure
实际上你没有扩展界面。 您只需创建一个Cross类型的泛型类。 您的类的定义仅指定参数化类型必须从图中派生,即实现图或其衍生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.