以下界面和抽象类有什么区别:
public interface MyInterface
{
public int get1();
public int get2();
public int get3();
}
public abstract class MyAbstract
{
public abstract int get1();
public abstract int get2();
public abstract int get3();
}
采访者不相信以下答案,他想听别的事情:
我必须扩展MyAbstract然后我不能有更多的扩展,而在实现MyInterface的情况下,我可以继承。
如果使用“implements MyInterface”,我必须提供所有三种方法的实现,而在“extends MyAbstract”的情况下,我愿意继承抽象性。
设计视角:所有库都在接口而不是抽象类上工作,使用接口是一种很好的设计实践,这样我以后的任何时候都可以创建任何可以在某些方法中使用的类(实现MyInterface)图书馆。 (基本与第一点相同)
还有什么可能?我不关心接口/抽象类中的变量等。如何决定使用哪一个?
答案 0 :(得分:3)
如果两个类之间的关系非常肯定是“is-a”关系,则可能存在使用抽象类的情况。
如果你有所有子类共有的“默认行为”,那么使用抽象基类的情况就更强了。
但总的来说,如果可以使用接口,那么你可能 使用接口。
... IMHO
答案 1 :(得分:0)
使用abstract
类与所有方法abstract
没有任何意义 - 这实际上是一个接口。如果你有一些共同的基本逻辑(实际代码,而不仅仅是抽象方法),那么声明一个abstract
类,可能实现interface
。
答案 2 :(得分:0)
当我没有应该放入的常用代码时,我选择了界面。只有在有可以通过子类共享的东西的情况下 - 是的我使用抽象类(模板模式)。
你总是可以拥有接口,而不是它的子类作为抽象类。
使用顶级界面。移动所有应实施的方法。使用接口而非实现的程序。实现有更多的改变,接口更少。