请用易于理解的语言或某篇文章的链接来解释。
由于Java 8允许在名为Default Method的接口中默认实现方法 ,所以在我将何时使用abstract class之间似乎存在混淆。 那么何时应该使用默认方法的接口,何时应该使用抽象类呢? 抽象类在这种情况下仍然有用吗?
如果我有两个接口,它们的目的完全不同,但是具有相同的方法签名,我怎样才能使一个类实现,而不必强制为这两个接口编写一个方法,并在方法中编写一些复杂的逻辑实现,检查哪种types的对象正在进行调用,并调用正确的代码? 在C#中,这被所谓的显式接口实现所克服。 在Java中有没有等价的方法?
由于多重inheritance是不好的(这使得源代码更复杂),C#不直接提供这样的模式。 但是有时候有这个能力会有帮助。 例如,我能够使用接口和三个类来实现丢失的多重inheritance模式: public interface IFirst { void FirstMethod(); } public interface ISecond { void SecondMethod(); } public class First:IFirst { public void FirstMethod() { Console.WriteLine("First"); } } public class Second:ISecond { public void SecondMethod() { Console.WriteLine("Second"); } } public class FirstAndSecond: IFirst, ISecond { First first = new First(); Second second = new Second(); […]
这可能是一个通用的OOP问题。 我想根据用法在接口和抽象类之间进行通用的比较。 什么时候想要使用一个接口,什么时候想要使用一个抽象类 ?
一个人如何去尝试在Java中查找给定类(或给定接口的所有实现者)的所有子类? 到目前为止,我有一个方法来做到这一点,但我觉得效率很低(至less可以这么说)。 方法是: 获取类path上存在的所有类名称的列表 加载每个类并testing它是否是所需类或接口的子类或实现者 在Eclipse中,有一个叫做Type Hierarchy的很好的特性,可以很有效地显示出来。 人们如何去做,并以编程方式进行?
我如何设置一个代表接口的类? 这只是一个抽象的基类吗?
界面和抽象类的区别究竟是什么?
最近有两次电话采访,我被问及界面和抽象类之间的区别。 我已经解释了他们所能想到的每一个方面,但似乎他们正在等待我提到一些具体的东西,我不知道它是什么。 从我的经验来看,我认为以下是事实。 如果我错过了一个重点,请让我知道。 接口: 在接口中声明的每个方法都必须在子类中实现。 接口中只有事件,委托,属性(C#)和方法可以存在。 一个类可以实现多个接口。 抽象类: 只有抽象方法必须由子类实现。 一个抽象类可以有实现的普通方法。 抽象类也可以在事件,委托,属性和方法旁边有类variables。 一个类只能由于C#中多重inheritance的不存在才能实现一个抽象类。 毕竟,面试官想出了这样一个问题:“如果抽象类只有抽象方法,那么接口又有什么不同呢? 我不知道答案,但我认为这是上面提到的inheritance权吗? 另一位面试官问我,如果你在界面中有一个公共variables,那么和抽象类有什么不同呢? 我坚持你不能在一个接口中有一个公共variables。 我不知道他想听什么,但他也不满意。 另见 : 何时使用接口而不是抽象类,反之亦然 接口与抽象类 你如何决定使用抽象类和接口? 界面和抽象类有什么区别?
我已经看到这个提到了几次,我不清楚它的含义。 何时以及为什么要这样做? 我知道接口是做什么的,但事实上我不清楚这一点让我觉得我错过了正确使用它们。 如果你这样做,是这样吗? IInterface classRef = new ObjectWhatever() 你可以使用任何实现IInterface类? 你什么时候需要这样做? 我能想到的唯一的事情就是如果你有一个方法,而你不确定哪个对象会被传递给IInterface 。 我想不出多久你需要这样做…(另外,你怎么能写一个方法,接受一个实现接口的对象?这是可能的吗?) 对不起,如果我完全错过了这一点。