2016-09-21 68 views
8

如果我有下面的类层次结构:科特林摘要受保护的属性

abstract class Foo<out T : Bar>() { 
    abstract protected val thing: T 
} 

class Baz : Foo<BarImpl> { 
    override protected val thing: T = ... 
} 

我得到巴兹::件事警告说:

冗余知名度修改

这是否意味着编译器将它视为受保护而不需要指定,或者它必须公开?

回答

7

在Kotlin中,您将收到一个IDE检查样式警告,例如您不需要的额外分号,额外的通用类型参数以及更多。您的冗余可见性修改器沿着相同的路线。

如果展开检查的消息,你会看到全文:

这场比赛的元素的默认可见性(公共大多数元素,保护的成员覆盖一个受保护的部件,其检验报告的可视性修饰符)。

如果您不再看到它,可以在IDE内关闭检查。这个

一些更多的注意事项:

当重写的祖先类,你已经在同级别的访问被宣布作为时的方法或成员。说protected是明显的(编译器知道它是protected)。

如果需要,您可以再次重新访问访问修饰符。你可以通过将其更改为public来打开它。但是你不能进一步限制它,例如去private(因为如果它是私人的,你怎么能覆盖它,这个想法是不符合override),这成为一个编译器错误。