- Learn Kotlin Programming(Second Edition)
- Stephen Samuel Stefan Bocutiu
- 301字
- 2021-06-24 14:13:33
Interface or abstract classes
There is always a debate over using either an interface or an abstract class. The following are a few rules to follow when deciding which way to go:
- Is-A versus Can-Do: Any type can inherit from one parent class only and multiple interfaces. If for the derived class B you can't say B Is-an A (A is the base type), contradictory. Interfaces imply a Can-Do relationship. If the Can-Do functionality is applicable to different object types, go with an interface implementation. For example, for both FileOutputStream and ByteOutputpuStream (and any of the other sibling implementations available), you can say they have an Is-A relationship with java.io.OutputStream. Hence, you will see that OutputStream is an abstract class providing common implementations to all objects that represent a writable stream. However, Autocloseable , which represents an object holding a resource that can be released when the close method is invoked, provides a Can-do functionality and thus it makes sense to have it as an interface.
- Promote code reuse: I am sure you will agree it is easier to inherit a class rather than an interface, where you have to provide an implementation for all the methods defined. A parent class can provide a lot of common functionality; thus, the derived class has only to redefine or implement a small subset of the methods defined.
- Versioning: If you work with an interface and you add a new member to it, you force all the derived classes to change their code by adding the new implementation. The source code has to be changed and recompiled. The same is not applicable to an abstract class. You can add your new method and make use of it, and the user source code doesn't even need to be recompiled.
推薦閱讀
- Vue.js設(shè)計與實現(xiàn)
- JavaFX Essentials
- Mastering Python Scripting for System Administrators
- TestNG Beginner's Guide
- 區(qū)塊鏈:以太坊DApp開發(fā)實戰(zhàn)
- Web程序設(shè)計(第二版)
- 網(wǎng)絡(luò)爬蟲原理與實踐:基于C#語言
- 零基礎(chǔ)學(xué)單片機C語言程序設(shè)計
- Flutter跨平臺開發(fā)入門與實戰(zhàn)
- Kotlin開發(fā)教程(全2冊)
- Flask Web開發(fā):基于Python的Web應(yīng)用開發(fā)實戰(zhàn)(第2版)
- HTML5與CSS3權(quán)威指南
- Scratch編程從入門到精通
- Extending Docker
- Java EE輕量級解決方案:S2SH