当前位置: 首页 > 知识库问答 >
问题:

JAVA-试图理解接口的大局[复制]

慕光霁
2023-03-14

我是一个初学者Java学习者,我一直在努力跟随欧拉项目。

我找到了Nayuki解决问题的方法,我很难理解这个界面的需要/目的。英语不是我的第一语言,所以我有点困惑这个界面的评论到底是什么意思:

// This forces every solution class to implement a common interface,
// which is helpful for unit testing like in the EulerTest implementation.
public interface EulerSolution {
    
    public String run();
    
}

据我所知,这意味着我可以运行接口,同时运行所有类,而不是逐个运行每个问题类?所以我不一定需要这个接口来解决问题,它只是一种实用的方法来检查它们是否都按预期的方式工作。

我知道编程非常抽象,但我已经为此挣扎了几周。也许,如果我能最终掌握界面在幕后到底在做什么,我就能更容易地理解界面、它们的功能,以及它们如何“适应”整个程序及其类。

非常感谢您的帮助!

共有2个答案

翁文康
2023-03-14

接口告诉你某件事可以做什么。任何实现接口的类都定义了任务的完成方式。每个EulerSolution都可以run()。您的EulerSolution的实现将按照您定义的方式工作,独立于其他实现。您可以写:

public class SolutionA implements IEulerSolution
{
    public String run()
    {
        return "Hello!";
    }
}

另一种实现方式可以是:

public class SolutionB implements IEulerSolution
{
    public String run()
    {
        return "Goodbye!";
    }
}

为什么这很有帮助?它允许你做这样的事情:

public class ShowSolutions
{
    public static void main(String args[])
    {
        IEulerSolution foo = new SolutionA();
        IEulerSolution bar = new SolutionB();

        System.out.println(foo.run());
        System out.println(bar.run());

        //displays:
        //  Hello!
        //  Goodbye!
    }
}

如果您想测试一个新的实现,您所需要做的就是将SolutionASolutionB更改为上面代码中的类的名称。如果您可以访问EulerTest,请查看它是否执行了类似的操作,以便使用您的解决方案。

徐瑞
2023-03-14

这不是关于同时运行所有的类,而是关于确保你可以以同样的方式运行所有的类。通过让每个解决方案类实现这个接口,它确保它们都是一个返回Stringrun()方法。

 类似资料:
  • 我是一个初学者Java学习者,我一直在努力跟随欧拉项目。 我找到了Nayuki对这些问题的解决方案,我很难理解这里接口的需求/用途。英语不是我的第一语言,所以我有点困惑,这里的界面评论到底是什么意思: 据我所知,这意味着我可以运行接口,同时运行所有类,而不是逐个运行每个问题类?所以我不一定需要这个接口来解决问题,它只是一种实用的方法来检查它们是否都按预期的方式工作。 我知道编程是非常抽象的,但是我

  • 本文向大家介绍深入理解Java中的接口,包括了深入理解Java中的接口的使用技巧和注意事项,需要的朋友参考一下 一. 为什么要使用接口 假如有一个需求:要求实现防盗门的功能。门有"开"和"关"的功能,锁有"上锁"和"开锁"的功能。 分析:首先防盗门是一个门,门有开门和关门的功能,还有一把锁,锁有开锁和上锁,按照面向对象的编程的思想,我们会将门和锁都作为一个类而单独存在,但是,不能让防盗门继承自门的

  • 我试着看http://ocw.mit.edu/courses/electrice-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/lecture-4-heaps-and-heap-sort/来理解堆和堆排序,但没有发现这一点。 我不明白max-heapify的功能。

  • 本文向大家介绍深入理解Java的接口与抽象类,包括了深入理解Java的接口与抽象类的使用技巧和注意事项,需要的朋友参考一下  对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本

  • 本文向大家介绍Java的接口和抽象类深入理解,包括了Java的接口和抽象类深入理解的使用技巧和注意事项,需要的朋友参考一下 Java的接口和抽象类深入理解 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Ja

  • 你们都知道我们工程师晚上工作最好:)昨天晚上我在学习lambdas,我看到了一段这样的代码,