Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么任何类型都可以扩展接口?_Java_Interface_Polymorphism_Extends_Parameterized - Fatal编程技术网

Java 为什么任何类型都可以扩展接口?

Java 为什么任何类型都可以扩展接口?,java,interface,polymorphism,extends,parameterized,Java,Interface,Polymorphism,Extends,Parameterized,今天我迷上了Java多态性。我做了一些我认为不可能的事情。也就是说,我有一个扩展接口 我已创建空接口: public interface Figure {} public class Cross implements Figure{} 现在没什么新鲜事。然后,我用Parameter创建了参数化的类板,它扩展了我的接口 public class Board< T extends Figure > { T[][] board; } 令我惊讶的是,我居然做到了: Board

今天我迷上了Java多态性。我做了一些我认为不可能的事情。也就是说,我有一个扩展接口

我已创建空接口:

public interface Figure {}
public class Cross implements Figure{}
现在没什么新鲜事。然后,我用Parameter创建了参数化的类板,它扩展了我的接口

public class Board< T extends Figure > { 
    T[][] board;
}
令我惊讶的是,我居然做到了:

Board b = new Board<Cross>();
板b=新板();
请帮我解释一下这种奇怪的情况
我对多态性略知一二,我明白十字架就是图形。 我不明白为什么任何类型都可以扩展接口,而实现interface(不是扩展接口)的howcome类作为扩展接口的参数是正确的。


请帮我解释一下这件事。谢谢。

当你说
公共类Board
时,它意味着Board可以接受
Figure
Figure
的子接口或实现这些接口的任何类。所以,当你说:

public class Cross implements Figure{}

因此,任何实现
二维图形的类也可以通过执行

public class Board< T extends Figure > { 
    T[][] board;
}
公共类板{
董事会;
}
您正在创建一个有界泛型类型,
T
,它的超类应为类型

正如线程中所解释的,定义一个扩展接口的泛型类型和一个类之间没有区别


编译器要确保的是,当您创建
Board
时,
T
将随任何具体类一起提供,
扩展Figure
实现Figure

实际上您没有扩展接口。您只需创建一个类型为Cross的泛型类。您的类的定义仅指定参数化类型必须从Figure派生,即实现Figure或它的派生。

好的,另一个接口可以扩展另一个接口。。因此,
T扩展图
可能检查T是一种接口类型。。但由于类型擦除,我不确定
public interface TwoDimensionalFigure extends Figure{}.
public class Board< T extends Figure > { 
    T[][] board;
}