关于Java:选择接口还是抽象类

choosing interface or abstract class

在一次采访中,我被要求证明什么时候选择接口,什么时候选择抽象类,以及在哪种情况下你只会选择其中的一个。我提出了我的界面分析,那就是…

Interface is best choice for Type declaration or defining contract
between multiple parties.
If multiple programmers are working in different modules of a project they still use each others API by defining interface and not waiting
for actual implementation to be ready.

This brings us a lot of flexibility and speed in terms of coding and
development. Use of Interface also ensures best practices like
"programming for interfaces than implementation" and results in more
flexible and maintainable code.

但是我没有足够的理由来证明抽象类的合理性,请建议…..


抽象类用于在一个实体下对多个具体类进行分组。

例如,以抽象类Animal为例。动物不是具体的东西。这是一个动物家庭。但他们都有某些共同点,例如,每个人都有一个speak()选项(好吧,除了鱼和种类)。但每种方法都是不同的。通过这种方式,您可以只重写不相同的方法,例如,sleep() or breath()是常见的(同样,fish是不同的)。

另一方面,接口更直接地定义了"操作"。这就是为什么Java中的大多数接口(如果不是全部)以"能"结尾的(可接受的,可序列化的……)通过实现接口,您告诉其他程序员或者曾经使用过您的代码的人,这个类可以做到这一点。例如,狗是不可动弹的。

总而言之,我认为最好的定义是这个。当您有一个A is kind of B类时使用抽象类,当A can do B类时使用接口。

希望有帮助。


当需要提供部分实现时,将使用抽象类。


  • 抽象类可以有默认行为(实现),如果需要,接口不能。

  • 抽象类可以为所有方法或没有方法提供默认行为,而接口则不能。

  • 抽象类可以与所有子类共享状态,接口不指定状态。

  • 可以实现多个接口,只能扩展一个(抽象)类。


您对接口的定义是正确的。

抽象类的用途应该完全不同。例如,假设您正在为一个动物模拟器实现几个类。"动物"定义了一些可能已经有了基本实现的行为,但它本身并不是一个有意义的实例。同样,对于"妈妈",一个"动物"的泡泡。只有一个子类"tiger"不会是抽象的,但是tiger所做的大部分非特定于tiger的工作都将在其抽象超类中实现。


接口声明了与实现它的任何对象的契约。它保证类将包含接口中的方法。

抽象类与任何子类相似,它还必须实现抽象方法,但是您也可以使用其中的代码来使用工作方法。

我经常使用Android编程的回调接口。如果我有很多相似的数据要显示,并且只想对实现做一些小的更改,那么我会使用很多抽象类。使用一个抽象类来减少重复的代码,同时仍然有不同的实现。


当您希望类仅在情况需要时实现方法时,可以使用抽象类。

举个例子,如果你有一辆超级级的车,你希望你的子类给你车轮的数量,如果他们有。如果它们是船的话,您就不需要它们了,所以契约将强制您静态实现,而您可以在抽象类中直接忽略它。


1。如果一般来说,当我们需要从Super-Class强制删除Sub-Class上的某些功能时,需要Abstract class,让子类具有添加其他功能的灵活性。

如:

Let Car be the Abstract Super-Class, which has 4 Tyres, 1 Steering ,etc...

Now the Sub classes like Santro i10, Maruti-800, Mahindr Bolero etc are Sub classes,江户十一〔10〕江户十一〔11〕号

2。由于没有多重继承,所以在Java中引入了EDCOX1 12。

三。Interface更多的是提供role

如:

Let Dog be the Super-Class

Wild Dogs and Pet Dogs are Sub-Classes.

Wild Behavior and Pet Behavior are Interfaces

江户十一〔18〕江户十一〔19〕号