问题标签 [interface-implementation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
18034 浏览

java - java中的“扩展”和“实现”在性能和内存等方面有什么区别

java中的扩展实现在性能和内存等方面有什么区别?例如采取以下场景,

对于上述场景(1,2),使用extends(派生子类)和implements(实现接口)有什么区别。在性能、内存等方面。?

0 投票
3 回答
6224 浏览

java - Java 接口 - 合同中到底有什么?

我知道并理解 Java 中接口的价值。您对接口进行编码,然后您可以更改您的实现,而无需使用该接口更改任何代码。通常,术语“合同”与接口一起使用。我理解它的方式是接口定义了应用程序和实现之间的“合同”。

所以,当我创建一个实现时,我必须履行合同。我的问题是,我必须履行的合同中究竟有什么内容?

显然,您至少必须提供与接口具有相同签名的方法。否则代码将无法编译。这就是“合同”的全部内容吗?似乎应该有更多。

例如,我读过一些文章,讨论了测试接口与测试特定实现的价值,或者两者兼而有之。我认为对接口进行测试很有价值,这样您就可以知道哪些输入具有哪些预期输出。在我看来,这也是接口“合同”的一部分。接口的每个实现都应该从相同的输入产生相同的输出。显然没有办法在代码中强制执行这个契约,但是可以通过测试用例来强制执行。我在这里的想法错了吗?

最后,实现的副作用是什么?在这里,我主要谈论作为实现的一部分可能发生的任何持久性。假设我有一个在执行操作时将一些记录保存到数据库的实现。这会以某种方式成为接口“合同”的一部分吗?如果是这样,你怎么能执行这个合同?从接口级别,我不知道实现实际上在做什么。我只知道我给它输入,它给我一个输出,我可以测试它。发生的任何持久性是否也被视为“输出”?如果是这样,我只是不明白如何测试和执行它。我是坚持无知的支持者,所以我可以知道应该坚持一些东西,但我不知道如何它是持久的。所以,我只是不知道什么时候真正持续存在。如果你的界面有一些简单的 CRUD 操作可能很简单,但我想考虑更复杂的界面。

我希望我的问题是有道理的,并且有人可以提供一些好的反馈。我想一般性地讨论这个问题,但如果不清楚我在说什么,我可以提供一个具体的例子。

0 投票
1 回答
3775 浏览

c# - 接口实现的“转到定义”等效快捷方式?

可能重复:
如何快速找到接口方法的实现?
转到具体类型的定义

除非您想快速跳转到函数实现,否则对接口进行编码非常有用。

在过去的好日子里,F12(转到定义)会直接带您到那里,但当然现在它只是带您到接口定义,而不是实现。

我很欣赏可能有多种实现,但有没有比手动查找文件或 Ctrl-Shift-F 搜索所有引用更快的方法,即使这也包括每个调用。“查找所有参考”给出了相同的结果。

只是想知道是否有人有一个方便的方法/宏?

0 投票
5 回答
313 浏览

c# - 接口与没有抽象类的实现?

我正在写一个库,我想要一个界面

对于每个 ISkeleton,Attach() 和 Detach() 实现实际上应该是相同的。因此,它基本上可以是:

但是 C# 不允许多重继承。因此,在各种问题中,用户每次想要实现 Skeleton 时都必须记住从 Skeleton 继承。

我可以使用扩展方法

但我需要有

我不想要,因为它不是协变的,用户可以绕过 Attach() 和 Detach() 方法。

问题:我必须真的使用抽象 Skeleton 类还是有任何技巧和方法?

0 投票
2 回答
1006 浏览

.net - 堆实现 ICollection,但具有来自 ICollection 的方法

我正在尝试创建一个基于Stack<T>. 当我在 Visual Studio 中查看Stack<T>[来自元数据] 时,它显示Stack<T>implements ICollection,这将要求它实现ICollection'CopyTo(Array array, index)方法,但相反,它显示为具有ICollection<T>'CopyTo(T[] array, index)方法。有人可以解释为什么会这样吗?

我正在尝试创建一个Stack<T>非常模仿的集合。当我ICollection像堆栈一样实现时,它需要我使用该CopyTo(Array array, index)方法,但我真正想要的是使用该CopyTo(T[] array, index)方法,就像这样Stack<T>做一样。有没有办法在不实施的情况下实现这一目标ICollection<T>

0 投票
2 回答
602 浏览

java - 实现接口的类不起作用,因为“类不是抽象的,不会覆盖抽象方法......”。错误是什么?

Java教程中有一个“实现接口”的例子。我已经重复了这个例子,但它不起作用。RectanglePlusNetBeans 在类声明的左侧显示错误。错误是:

rectangleplus.RectanglePlus 不是抽象的,不会覆盖 rectangleplus.Relatable 中的抽象方法 isLargerThan(rectangleplus.Relatable)

我做了和教程中写的一样的。为什么显示错误?这是我对该项目的实施。

  1. 该项目的名称是RectanglePlus
  2. 包的名称是rectangleplus

项目中的第一个文件是 Interface Relatable

项目中的第二个文件是RectanglePlus带有辅助类的主类Point

为什么教程示例中没有提到抽象?教程示例应该在没有 mitakes 的情况下工作吗?

谢谢你。

0 投票
4 回答
3058 浏览

java - 实现接口并扩展不同项目的类

这个疑问已经困扰了我很长一段时间了。我将尝试以以下场景的形式呈现它。

设想 -

假设我在 Eclipse-JUNO 的同一个工作区中有 2 个不同的项目,Project-1 和 Project-2。Project-1 在包 P 中有一个接口 I 和一个类 A,而 Project-2 在包 Q 中有一个类 B。我想知道我是否可以让(Project-2 的)类 B 实现接口 I并扩展 Project-1 的 A 类(均位于包 P 中)。如果是,如何?如果不是,有哪些替代方法?

期待了解这种情况。

提前致谢!

0 投票
3 回答
1616 浏览

java - 我将如何实现这个 Java 接口?

我目前处于此问题的设计模式:

实现预定义的 Speaker 接口。创建三个以各种方式实现 Speaker 的类。创建一个驱动程序类,其主要方法实例化其中一些对象并测试它们的能力。

我将如何设计这个程序以及他们进入编码阶段。我想用这三个类来实现 Speaker 接口类:Politician、Lecturer 和 Pastor 类。我想使用的方法是:

public void speak(); public void announce (String str);

现在对于我的设计和编码,我将如何声明和对象引用变量并让该变量具有多个引用?

0 投票
3 回答
8725 浏览

c# - 在 MVC4 中显示和错误,我必须实现一些接口,但我已经完成了

我正在尝试创建自己的过滤器属性以支持多语言。这个想法很简单。URL 代表语言。

  • *http://host.ext/ en /rest_of_the_url* 将以英文打开,并且
  • *http://host.ext/ hy /rest_of_the_url* 将以亚美尼亚语打开。

问题是在运行时它说 MultilingualActionFilterAttribute

这是错误文本“给定的过滤器实例必须实现以下一个或多个过滤器接口:IAuthorizationFilter、IActionFilter、IResultFilter、IExceptionFilter。”

在这里,我将其用作全局过滤器。

我在这里定义它。

0 投票
8 回答
2833 浏览

c++ - 查找未实现的类方法

在我的应用程序中,我正在处理一个较大的类(超过 50 个方法),每个类都相当复杂。我并不担心复杂性,因为它们在将功能块分离成更小的方法然后调用它们方面仍然很简单。这就是方法数量变大的原因(其中很多方法是私有的——特别是隔离功能块)。

然而,当我进入实施阶段时,我发现我忘记了哪些方法已经实施,哪些方法没有实施。然后在链接阶段,我收到未实现方法的错误。这很好,但是类之间有很多相互依赖关系,为了链接应用程序,我需要准备好一切。然而,我更愿意先上一堂课,然后再去下一堂课。

由于我无法控制的原因,我不能使用 IDE——只能使用纯文本编辑器和 g++ 编译器。有没有办法在一个类中找到未实现的方法而不进行完整链接?现在,我确实对每个方法的实现 cpp 文件中的方法签名进行文本搜索,但这非常耗时。