gpt4 book ai didi

Java - 接口(interface)方法

转载 作者:搜寻专家 更新时间:2023-11-01 04:06:30 25 4
gpt4 key购买 nike

只是在玩弄界面,我有一个我无法真正理解的问题。

以下代码未运行,这是我期望的行为,因为接口(interface)方法要求该方法适用于任何对象,并且已实现的方法已将签名更改为仅允许字符串对象。

interface I {
public void doSomething(Object x);
}

class MyType implements I {
public void doSomething(String x) {
System.out.println(x);
}
}

然而,使用下面的代码块,我震惊地发现它确实有效。 我认为它不会工作,因为我们期望返回一个对象,而实现的方法只会返回一个字符串对象。为什么会这样?传递参数和返回类型这两个原则有什么区别?

interface I {
public Object doSomething(String x);
}

class MyType implements I {
public String doSomething(String x) {
System.out.println(x);
return(x);
}
}

最佳答案

public Object doSomething(String x);

必须返回一些东西。事实上,任何东西,只要它是某种类型的对象。所以如果你实现

public String doSomething(String x) {stuff}

没关系,因为它实际上返回了一个对象。它将返回的对象始终是字符串这一事实没什么大不了的。

第一个示例不起作用的原因是,仅接受字符串比接受任何对象更具限制性。但是只返回字符串就可以了。

打个比方,假设您有一份粉刷建筑物的契约(Contract),您将雇用一些员工来帮助您。契约(Contract)要求您雇用任何适用的油漆工,无论他们有多高,但没有指定使用什么颜色的油漆。如果你只雇用高度超过 6 英尺的画家(这是输入,只接受字符串而不是所有对象),你就会违反契约(Contract)。但是选择只用蓝色油漆(只返回字符串)就可以了,因为契约(Contract)没有指定颜色,只是你必须粉刷建筑物。

关于Java - 接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10586702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com