![]() |
1
4
除了波义耳所说的,你不能在不暗示编者意图的情况下改变它。通过将泛型引入接口,可以做到这一点,比如:
|
![]() |
2
4
通过更改类Y中输入参数的类型,您已经更改了方法的签名,这意味着编译器将其视为完全不同的方法。 Java接口就像一个合同。任何实现它的东西 必须 实现它定义的确切方法。通过使用不同的方法签名,您没有真正实现定义的方法,因此您违反了该约定。 |
![]() |
3
2
尝试一下
|
![]() |
4
1
假设你已经做了你想做的事情,假设Java允许它。让我们假设另一个类,称之为z,也实现了x。因为z实现了x,而且由于x的定义,你必须能够为任何z调用x.foo(z)。但是,如果你将z传递给它的foo(),y(x)不知道该怎么做。这就是为什么。 |
![]() |
5
0
通过实现接口X,您保证在此接口上实现所有方法,这意味着您的foo方法可以采用任意X。 现在,如果您只接受ys作为foo方法的参数,那么就不会完全实现接口,因为实现x的所有其他类都不是foo的有效参数。 |
![]() |
6
0
因为接口为所有实现类指定了公共行为。假设您有一些其他的类,所有实现X,您会期望如果您有类X的对象,您可以用类X的参数(可以是它的任何子类或实现)调用foo,那么让我们假设您有这样的代码:
这将是错误的,因为对于代码,foo只接受类y的参数 |
![]() |
David Sundström · 子视图在xcode游乐场中不工作 7 年前 |
|
James Wang · 为什么我的超类要调用我的子类方法? 7 年前 |
![]() |
J. Cal · 子类无法继承超类字段[重复] 7 年前 |
![]() |
Narwhal · 如何在UIView的子类中正确初始化传递的属性? 7 年前 |
![]() |
Sami · 超类行为未按预期应用于企鹅对象 7 年前 |
![]() |
SanMu · 对子类使用SKSpriteNode的属性 7 年前 |