Java позволяет получить доступ к базовой переменной Kotlin через ее дочерний элемент, но не Kotlin, почему?

У меня есть класс, как показано ниже

open class KotlinBase { companion object { const val TAG = "testing" } } 

И ребенок из него как

 class KotlinChild : KotlinBase() 

Когда я пытаюсь получить доступ к TAG из класса Java, я мог бы либо

 public class JavaOther { String test1 = KotlinBase.TAG; // This is okay String test2 = KotlinChild.TAG; // This is okay } 

Однако при доступе к классу Котлин я не могу получить доступ через Ребенка.

 class KotlinOther { val test1 = KotlinChild.TAG // Compile/Syntax error val test2 = KotlinBase.TAG // This is okay } 

Почему мой класс Kotlin не может получить доступ к унаследованной переменной TAG через KotlinChild ?

Это дизайнерское решение, позволяющее избежать двусмысленности. – дочерние классы могут иметь свой собственный companion object s с полями / методами, имеющими те же имена, что и в родительском.

Ограничивая доступ к компаньонам только через фактический класс, проблемы с неоднозначным тенерием полей / методов больше не существуют.

Кроме того, объекты-компаньоны не являются static членами, известными на других языках. Хотя большинство случаев использования перекрываются.

Кроме того, помните, что

 KotlinBase.TAG 

это ярлык для:

 KotlinBase.Companion.TAG