Kotlin 伴生對象(Companion Object)的限制主要包括以下幾點:
不能訪問外部類的私有成員:伴生對象不能直接訪問外部類的私有成員(private, protected),但可以訪問外部類的公有成員和保護成員。如果需要訪問私有成員,可以通過在外部類中定義一個公有的靜態方法來實現。
不能被實例化:伴生對象不能被實例化,也就是說,你不能使用 new
關鍵字來創建伴生對象的實例。要訪問伴生對象中的屬性和方法,可以直接通過外部類的名稱來調用。
伴生對象中的屬性必須是靜態的:由于伴生對象不能被實例化,因此它們中的屬性必須是靜態的(val)或常量(const)。這樣可以確保屬性在所有實例之間共享。
伴生對象中的方法不能被重載:在同一個類中,伴生對象中的方法不能與其他靜態方法重載。這意味著你不能為同一個類創建多個具有相同名稱但參數列表不同的靜態方法。
伴生對象中的方法不能被繼承:伴生對象中的方法是靜態的,因此它們不會被繼承。子類無法覆蓋或重寫父類伴生對象中的方法。
伴生對象中的方法不能被隱藏:伴生對象中的方法與外部類的非靜態方法同名時,它們不會被隱藏。實際上,這種情況下,外部類的非靜態方法會被伴生對象中的方法覆蓋。
伴生對象中的方法不能被接口繼承:伴生對象中的方法是靜態的,因此它們不會被接口繼承。接口只能包含靜態常量和抽象方法(Java 8 之后支持默認方法和靜態方法)。