首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类机房实体

子类机房实体
EN

Stack Overflow用户
提问于 2018-08-15 17:39:07
回答 1查看 1.7K关注 0票数 4

有办法在会议室中对实体进行子类处理吗?

我有一辆车entity

代码语言:javascript
复制
@Entity(tableName = "cars")
data class Car(
        @PrimaryKey @ColumnInfo(name = "vin") val vin: String,
        val manufacturer: String,
        val model: String,
        val color: String,
        val modelYear: Int,
        val trim: String = ""
) {

    override fun toString() = String.format("%s %s %s %s", modelYear, manufacturer, model, trim)
}

但是我想将manufacturermodelmodelYear移动到Vehicle实体中,并让Car继承它。

我尝试用这些字段创建一个Vehicle实体,并使用data class Car : Vehicle,但没有编译。错误是This type is final and cannot be inherited

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 17:53:46

kotlin中,默认情况下所有类都是最终类。

来自文档

类上的开放注释与Java的final相反:它允许其他人从该类继承。By default, all classes in Kotlin are final,对应于有效的Java,第3版,第19项:继承的设计和文档,否则禁止它。

所以您需要添加open关键字,所以请使用

代码语言:javascript
复制
open class Vehicle(..){...}

然后

代码语言:javascript
复制
data class Car(...): Vehicle(..){}

边注:如果您试图继承data类,那么您就不能在Kotlin中继承data类,因为数据类中的copy之类的方法是最终的,不能被子类覆盖(在本例中是data类,因此它将自动完成),而且很难实现其他方法,比如当类层次结构随不同的数据成员呈指数增长时,尽管可以通过创建非数据父类或abstract类来避免所有这些冲突。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51863737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档