Java/Kotlin中Abstraction抽象概念疑问:普通类继承是否属于抽象实现
关于抽象概念的三个问题解答
问题1:第一种使用普通open类继承的场景是否符合抽象的定义?
符合。抽象的核心定义是隐藏特定细节、仅向用户展示必要信息,你在代码里将变量声明为父类SimpleClass类型,调用方只能访问SimpleClass对外暴露的公共方法,完全感知不到底层实际是ChildSimpleClass的实现,已经满足抽象的核心特征。
问题2:如果符合,为什么多数资料都称抽象是通过接口和抽象类实现的,而非普通类?
因为普通类实现抽象存在非常多的天然局限性,工程上很少作为主流的抽象实现方案,所以资料大多优先介绍专门为抽象设计的语法结构:
- 普通open类支持直接实例化,无法强制调用方必须依赖抽象契约而非具体实现
- 普通类的方法默认自带实现,无法强制子类必须重写核心逻辑,容易出现子类漏改导致的逻辑bug
- 普通类是单继承限制,无法实现多维度抽象契约的组合,接口支持多实现的特性能很好的解决这个问题
不是普通类不能实现抽象,只是它的约束性太弱,适用场景极窄,所以资料不会重点讲解这种用法。
问题3:如果不符合,该场景下调用方仅感知到SimpleClass的公开方法、未暴露ChildSimpleClass的实现细节,为什么不算抽象?
这个场景是符合抽象定义的,不存在不符合的情况。你感知到的「调用方只感知父类公开方法、不感知子类实现细节」就是抽象的核心表现,只是这种实现方式的约束性差,不属于工业界推荐的抽象实现方案而已。
内容的提问来源于stack exchange,提问作者Akshay Shah
相关产品推荐
相关产品推荐

