Tag: 接口

Java中接口实现的inheritance

我有两个关于Java接口的问题。 1)如果一个类碰巧实现了接口I的所有接口方法,而没有声明自己实现它们,它仍然可以用作I类变量的输入吗? 2)实现接口I的A类的子类是否inheritance了该接口的一致性,还是应该声明自己实现I?

了解Java中的inheritance和抽象类

好吧所以我通过googleing寻找文档,但是我没有找到任何真正描述我想要回答的内容,所以我在这里问你们。 所以我得到了inheritance,以及它是如何工作的。 我遇到问题的有时候我看到一个最初定义为一种类型的对象,并设置为不同的类型,我不明白究竟发生了什么。 这是一个例子: 说我有一个类动物,并且类猫和狗延伸动物。 猫,动物和狗都有方法说(),对于猫打印“喵”和狗打印“woof”和动物“不能说话”。 好吧,所以最后这是我的问题。 如果制作一只猫(c)然后运行Animal a = c,究竟会发生什么? 如果我运行a.speak()会发生什么? 哪种说法叫做? 当我改变那样的类型时究竟发生了什么? 我有没有真正的理由使用它? 就抽象方法而言,我的问题是拥有它们究竟是什么意思? 在示例中,我已经看到它们已被放入超类中,并且其下的类定义了确切的行为。 通过在超类中放置一个抽象方法,需要它下面的所有类来实现它吗? 感谢你的帮助!

类内的接口

在类内部,嵌套类和外部类之间使用接口有什么区别。 正如我在阅读有关问题和练习中的类DataStructure.java中的嵌套类 (在此处粘贴示例的片段): public class DataStructure { //some code interface DataStructureIterator extends java.util.Iterator { } // Inner class implements the DataStructureIterator interface, // which extends the Iterator interface private class EvenIterator implements DataStructureIterator { //rest code 因此,关于显示的代码,界面中没有任何正文。 难道我不能用java.util.Iterator扩展EvenIterator类而不是创建这个接口并实现它吗? 在声明外部/内部干扰之间是否还有其他差异(除了代码可读性之外)? 当外部类通过接口扩展时会发生什么。 它会以任何方式影响嵌套类吗? 感谢您的时间,只是想确定如何正确使用它们。

Java 8中接口和抽象类之间的根本区别

考虑到接口现在可以为它提供的方法提供实现,我无法正确理解接口和抽象类之间的差异。 有谁知道如何正确解释差异? 我还被告知,与抽象类相比,接口稍微更轻,性能明智。 有人可以证实吗?

在使用generics(Java)的扩展接口中覆盖方法契约?

我试图覆盖扩展另一个接口的接口中的方法声明。 这两个接口都使用generics。 根据Java教程,这应该是可能的,但该示例不使用generics。 当我尝试实现它时,编译器显示以下错误(我已经替换了名称,因为某些代码不是我自己的。): InterfaceExtended中的myMethod(T)与Interface中的myMethod(T)冲突; 两种方法都有相同的擦除,但都不会覆盖另一种方法。 代码如下所示: public interface Interface { public void myMethod(T x); } public interface ExtendedInterface extends Interface { public void myMethod(T x); } 如果有人建议如何改变它以使其可接受,或解释这是导致问题的原因,我将非常感激。 谢谢! badPanda

在java中实现接口方法是否覆盖

我知道这可能很疯狂,但今天我的一位朋友在询问我们在java中实现接口时感到困惑的是它被视为方法覆盖。 我告诉他,当我们实现任何接口时,第一次提供方法的工作(定义)时,它不会重写。 为了支持多重inheritance,java提供了接口,但他并不相信并且在争论。 请介绍一下这个话题。

在Java中声明一个迭代器

我对Java中的迭代器非常困惑。 该教程正在阅读中说: 在Java编程语言中,接口是类似于类的引用类型,它只能包含常量,方法签名和嵌套类型。 没有方法体。 接口无法实例化 – 它们只能由类实现或由其他接口扩展。 扩展将在本课程后面讨论。 然后我看到了另一个教程: Iterator flavoursIter = aFlavours.iterator(); 我知道aFlavours已经inheritance了迭代器函数,它返回迭代器接口。 我只是不明白这一行实际发生了什么。 我以为你无法实例化? 也许我没有意义,但请告诉我,我正在离开赛道。

Java接口 – 合同到底是什么?

我知道并理解Java中接口的价值。 您可以对接口进行编码,然后您可以更改实现,而无需使用接口更改任何代码。 通常,术语“合同”与接口一起使用。 我理解它的方式是接口定义应用程序和实现之间的“契约”。 所以,当我创建一个实现时,我必须履行合同。 我的问题是,我必须履行的合同到底是什么? 显然,您必须至少提供与接口具有相同签名的方法。 否则代码将无法编译。 这是所有的“合同”吗? 似乎应该有更多。 例如,我读过一些文章,讨论测试界面与测试特定实现的价值,或两者兼而有之。 我认为对接口进行测试非常有价值,这样您就可以知道哪些输入具有预期的输出。 在我看来,这也将是“合同”界面的一部分。 接口的每个实现都应该从相同的输入产生相同的输出。 显然,没有办法在代码中强制执行此合同,但可以通过测试用例强制执行。 我的想法在这里错了吗? 最后,实现有哪些副作用? 在这里,我主要讨论可能作为实现的一部分发生的任何持久性。 假设我有一个实现,它会在执行操作时将一些记录保存到数据库中。 这会以某种方式成为界面“合同”的一部分吗? 如果是这样,你怎么能执行这份合同? 从界面层面来看,我不知道实现实际上在做什么。 我所知道的是我给它输入,它给了我一个输出,我可以测试。 是否存在任何持久性也被视为“输出”? 如果是这样,我只是看不出如何测试和执行。 我是坚持无知的支持者,所以我可以知道应该坚持某些东西,但我不知道它是如何持久存在的。 所以,我只是不知道什么时候实际存在的东西。 如果您的界面有一些简单的CRUD操作可能很简单,但我想考虑更复杂的界面。 我希望我的问题有道理,有人可以提供一些好的反馈。 我想一般性地讨论这个问题,但如果我不清楚我在谈论什么,我可以提供一个具体的例子。

Java 8默认方法inheritance

假设有以下类型: public interface Base { default void sayHi(){ System.out.println(“hi from base”); } } public interface Foo extends Base { @Override default void sayHi(){ System.out.println(“hi from foo”); } } public interface Bar extends Base { } public class MyClass implements Foo, Bar { public static void main(String[] args) { MyClass c = new MyClass(); c.sayHi(); } […]

Eclipse可以自动生成第三方库类的接口吗?

我正在Apache commons网络库中使用Apache的FTPClient类。 遗憾的是,它没有为大多数function实现接口,这使得使用它的测试类变得棘手。 所以,我想我会创建自己的类,它包装了这个并实现了一个接口。 无论如何那是背景。 我的问题是,在Eclipse中是否可以生成一个接口(类似于Refactor-> Extract Interface),但是对于坐在jar文件中的第三方代码? 为了澄清,我不是在寻找FTPClient来实现新的接口,而是创建一个模仿与FTPClient相同的公共API的接口。 然后我可以创建自己的类来实现这个接口并封装FTPClient。