gpt4 book ai didi

java - 使用在实现中声明但未在接口(interface)中定义的方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:41:32 27 4
gpt4 key购买 nike

我有一个由接口(interface)定义的类

public interface Test {
void testMethod();
}

Test test = new TestImpl();

public class TestImpl implements Test {
@Override
public void testMethod() {
//Nothing to do here
}

public void anotherMethod() {
//I am adding this method in the implementation only.
}
}

如何调用另一个方法?

test.anotherMethod(); //Does not work.

我希望能够在实现中定义一些方法,只是因为在我的生产代码中,Test 接口(interface)涵盖了相当广泛的类,并且由多个类实现。我使用实现中定义的方法来设置单元测试中 DI 框架未涵盖的依赖项,因此方法会随着实现的不同而变化。

最佳答案

问题出在以下行:

Test test = new TestImpl();

这告诉编译器忘记新对象是 TestImpl 并将其视为普通的旧测试。如您所知,Test 没有 anotherMethod()。

您所做的称为“向上转换”(将对象转换为更通用的类型)。正如另一位发帖人所说,您可以通过不向上转换来解决问题:

TestImpl test = new TestImpl();

如果您确定一个 Test 对象确实是一个 TestImpl,您可以将它向下转型(告诉编译器它是一个更具体的类型):

Test test = new TestImpl();
:
((TestImpl) test).anotherMethod();

然而,这通常不是一个好主意,因为它会导致 ClassCastException。与编译器一起工作,而不是反对它。

关于java - 使用在实现中声明但未在接口(interface)中定义的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9732910/

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