繁体   English   中英

为什么我不需要在 Kotlin 密封的 class 中写入属性 object class?

[英]Why don't I need to write property at object class in sealed class by Kotlin?

我正在使用 Kotlin 开发应用程序。

sealed class DestinationScreen(val route:String){
    object Signup: DestinationScreen(route = "signup")
}

@Composable
fun InstagramApp(){
 
    val navController = rememberNavController()
    
    NavHost(navController = navController, startDestination = DestinationScreen.Signup.route){
        composable(DestinationScreen.Signup.route){
            SignupScreen(navController = navController)
        }
    }
}

我不知道为什么 Signup singleton class 可以使用 argv 拥有属性“route”? 我了解它继承了 DestinationScreen。 所以它也有路由属性。

但是 Destination class 没有具体的属性route 如果 Destination class 是数据 class,则不需要声明该属性。 不需要{} 数据 class 具有未使用 argv 声明的属性。 所以我的意思是 DestinationScreen 应该有具体的属性route ,如果 Signup 继承不同属性的值,它应该覆盖。 为什么上面的代码可以工作? 此功能是否有密封 class 或 object class?

请教我。 谢谢你。

但是 Destination class 没有具体的属性route

是的,它确实。 route属性在其构造函数中就在那里声明。

如果 Signup 继承了不同属性的值,它应该覆盖

不确定您的意思,但 Signup 不需要覆盖该属性。 它已经继承了财产。 通过将值传递给超类的构造函数,现有属性将获得子类传递的初始值,而无需覆盖它。

您提到了sealeddata class 类型,但它们与本次讨论无关。 Inheritance 对密封类和非密封类的工作方式相同。

任何时候 class 扩展另一个 class,它也是 class一个类型,并继承它的所有属性和功能,不需要覆盖。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM