我应该为接口还是抽象基类编程?该短语到底是什么意思

Should I Program to an Interface or an Abstract Base Class? What exactly does that phrase mean?

本文关键字:短语 意思 是什么 编程 接口 基类 抽象 我应该      更新时间:2023-10-16

在面向对象的编程中,我读到您应该将其编程到接口而不是实现,但它们是否表示字面界面(根本没有共享代码)?

可以将其编程到一个抽象基类,除了在此"接口"中有所有子类都有的变量外,该接口本来可以是接口?在子类中复制变量是不便的,因为如果我更改了一个子类中的一个变量的名称,我将不得不在所有子类中更改该变量的名称。

遵循"对界面而不是实现"的原则,这是可以的,还是在该接口的抽象基类和程序之上创建另一个接口?

您想编程到接口,因为这意味着较低的耦合。请注意,Java中的接口更加灵活,因为与抽象类别(由于单个继承的结果),类层次结构中的类 awher> Awhine 可以实现它们。这种灵活性意味着您的代码可以在更高的程度上重复使用。

"编程到接口而不是实现"的重要一点是上面提到的一般原则,即使它们可能导致一些较小的不便。。

另外,即使您将接口编程为接口,也可以始终通过抽象类实现上述接口(或部分),同时可以同时实现低耦合和代码可重复使用性。p>始终可以编程抽象甚至具体的类,但是最好避免使用。

这个讨论可能会有所帮助,或者当然还有。

注意:C 没有接口。您可能会说它不需要它们。

您应该将其编程到接口而不是实现,但它们是指字面接口(根本没有共享代码)?

可能。在有意义的地方,它可以很好地工作。注意:在Java接口中也可以具有代码。

可以编程到抽象基类,除了在此"接口"中有变量,所有子类都有?

如果您需要实现中的字段,则抽象类可能是有道理的。您仍然可以使用接口。

在子类中复制变量将是不便的,因为如果我更改了一个子类中的一个变量的名称,我将不得不在所有子类中更改该变量的名称。

这是使用IDE帮助的地方。您可以使用一个操作更改所有代码中的字段,类,方法名称。

这还可以还是您会在该接口的抽象基类和程序上创建另一个接口?

您可以将实施方式编码为抽象类,但是如果可能的话,该类的用户应使用接口。

例如。HashMap扩展了AbstractMap,但实现了Map。大多数人会使用Map不是AbstractMap