Почему объектам, находящимся внутри объекта сопутствующего объекта Kotlin, не удается получить доступ к «статически», когда другие члены могут?

Учитывая объект компаньона Котлина

class A { companion object { val a = 0 fun b() = 1 object C { val d = 0 } } } fun main(args: Array<String>) { println(Aa) println(Ab()) println(ACd) // doesn't compile println(A.Companion.Cd) } 

Почему Companion требуется для доступа к AC если он не для a и b() ?

Это служит для устранения неоднозначности объекта, объявленного в сопутствующем объекте, из объявленного непосредственно в классе.

Обратите внимание, что свойства и функции, определенные в классе, не являются двусмысленными с объектами сопутствующего объекта, поскольку первые могут быть вызваны только на экземпляр класса. Но вложенный объект можно ссылаться на имя класса:

 class A { object C { val d = 0 } } println(ACd)