当前位置: 首页 > 面试题库 >

使用在实现中声明的,未在接口中定义的方法

山乐生
2023-03-14
问题内容

我有一个由接口定义的类

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.
    }
}

我怎样才能调用anotherMethod?

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

我只想在实现中定义一些方法,因为在我的生产代码中,Test接口涵盖了相当广泛的类,并由多个类实现。我使用在实现中定义的方法来设置单元测试中DI框架未涵盖的依赖项,因此方法在实现之间会有所不同。


问题答案:

问题在于以下行:

Test test = new TestImpl();

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

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

TestImpl test = new TestImpl();

如果 确定 Test对象确实是TestImpl,则 可以将其 向下转换(告诉编译器它是更特定的类型):

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

但是,这通常是一个坏主意,因为它可能导致ClassCastException。使用编译器,而不是反对编译器。



 类似资料:
  • 问题内容: 我在Java中有以下情形。假设我有一个接口,以及两个实现此接口的类。如下: 公共接口myInterface { } 公共类A实现myInterface { } 公共类B实现myInterface { } 如果定义如下,如何调用上面的printOtherStuff方法: 上面的调用代码似乎无效。有任何想法吗? 问题答案: 的参考类型为。这意味着您只能访问接口中定义的方法。您可以将其强制类

  • 问题内容: 在现代Python中声明自定义异常类的正确方法是什么?我的主要目标是遵循其他异常类具有的任何标准,以便(例如)我捕获到异常的任何工具都可以打印出我包含在异常中的任何多余字符串。 “现代Python”是指可以在Python 2.5中运行但对于Python 2.6和Python 3. 是“正确”的方式。所谓“自定义”,是指一个Exception对象,该对象可以包含有关错误原因的其他数据:字

  • 主要内容:接口声明的格式,开发中常见的接口及写法Go语言不是一种 “传统” 的面向对象编程语言:它里面没有类和继承的概念。 但是Go语言里有非常灵活的接口概念,通过它可以实现很多面向对象的特性。很多面向对象的语言都有相似的接口概念,但Go语言中接口类型的独特之处在于它是满足隐式实现的。也就是说,我们没有必要对于给定的具体类型定义所有满足的接口类型;简单地拥有一些必需的方法就足够了。 这种设计可以让你创建一个新的接口类型满足已经存在的具体类型却不

  • 问题内容: 有人可以向我解释为什么定义了方法吗?收藏已经扩展; 这种方法是多余的。这是为了方便吗? 问题答案: 该接口是Java 1.2中使用Collections API引入的。当时存在该方法。但是,直到Java 1.5才引入接口。明确定义的原因是因为它早于。一个的想法返回一个早的想法。

  • 我正在编写一个代码,它取两个点,确定两个点的大小,比较它们,并返回哪个更大。我有我的主类和方法来运行所有的东西,然后还有另一个类点来实现我的接口。但是,我无法使从接口调用的方法正常工作。我的代码是: 当我尝试运行它时,我得到错误“exception in thread”main“java.lang.nullPointerException:不能调用”point.getMetality()“,因为”

  • 问题内容: 我有一个定义方法的接口。我有一个 实现 此接口的结构。在其中,我已经从该接口实现了方法,并且还定义了其他方法。 例如: 在操场上:https : //play.golang.org/p/B1GgoNToNl_l 在此,WagTail()不是Animal接口的一部分,但属于Dog结构。运行此代码会出现错误 dog.WagTail未定义(动物类型没有字段或方法WagTail)。 有没有一种