我应该为接口还是抽象基类编程?该短语到底是什么意思
Should I Program to an Interface or an Abstract Base Class? What exactly does that phrase mean?
在面向对象的编程中,我读到您应该将其编程到接口而不是实现,但它们是否表示字面界面(根本没有共享代码)?
可以将其编程到一个抽象基类,除了在此"接口"中有所有子类都有的变量外,该接口本来可以是接口?在子类中复制变量是不便的,因为如果我更改了一个子类中的一个变量的名称,我将不得不在所有子类中更改该变量的名称。
遵循"对界面而不是实现"的原则,这是可以的,还是在该接口的抽象基类和程序之上创建另一个接口?
您想编程到接口,因为这意味着较低的耦合。请注意,Java中的接口更加灵活,因为与抽象类别(由于单个继承的结果),类层次结构中的类 awher> Awhine 可以实现它们。这种灵活性意味着您的代码可以在更高的程度上重复使用。
"编程到接口而不是实现"的重要一点是上面提到的一般原则,即使它们可能导致一些较小的不便。。
另外,即使您将接口编程为接口,也可以始终通过抽象类实现上述接口(或部分),同时可以同时实现低耦合和代码可重复使用性。p>始终可以编程抽象甚至具体的类,但是最好避免使用。
这个讨论可能会有所帮助,或者当然还有。
注意:C 没有接口。您可能会说它不需要它们。
您应该将其编程到接口而不是实现,但它们是指字面接口(根本没有共享代码)?
?
可能。在有意义的地方,它可以很好地工作。注意:在Java接口中也可以具有代码。
可以编程到抽象基类,除了在此"接口"中有变量,所有子类都有?
如果您需要实现中的字段,则抽象类可能是有道理的。您仍然可以使用接口。
在子类中复制变量将是不便的,因为如果我更改了一个子类中的一个变量的名称,我将不得不在所有子类中更改该变量的名称。
这是使用IDE帮助的地方。您可以使用一个操作更改所有代码中的字段,类,方法名称。
这还可以还是您会在该接口的抽象基类和程序上创建另一个接口?
您可以将实施方式编码为抽象类,但是如果可能的话,该类的用户应使用接口。
例如。HashMap
扩展了AbstractMap
,但实现了Map
。大多数人会使用Map
不是AbstractMap
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- 错误:无效的预处理指令 #i 的意思是 #if?
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- Trie*& 和 Trie** 的意思是 Same?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 在命名空间名称之前加上 :: 是什么意思?
- 从字符数组的元素中减去'a'是什么意思
- 我应该为接口还是抽象基类编程?该短语到底是什么意思