1. 개념
객체 선언 플러스 앞에서 동반자 키워드 연관된 객체를 생성합니다. 의 역할은 클래스 위치를 외부에 있습니다 아날로그 정적 멤버 .
구문 : (ObjectName를 생략 할 수 있음)
companion object ObjectName : [0~N个父类型] {
//伴生对象类体
}
2. 특징
- 각 클래스는 동반자까지 개체를 정의;
- 관련 대상 에 해당 클래스 외부 개체, 당신은 외부 클래스 이름과 관련된 개체의 회원들에 의해 직접 액세스 할 수 있습니다;
- 코 틀린는 오브젝트와 연관된 정적 키워드를 취소하기 때문에 정적 키워드 정적 멤버 수정 코 틀린의 부족을 만회하지 않는 것입니다;
- 동반자 객체는 대상의 정적 멤버하지만 동반자 오브젝트 회원 아직도 그 외부 클래스의 멤버에 관련된 개체 자체의 구성원입니다 시뮬레이션이된다.
3. 관련 객체를 정의
fun main() {
println(OuterClass.name)//伴生对象属性
OuterClass.companionFun()//调用伴生对象方法
OuterClass.CompanionObjectName//通过伴生对象名称获取伴生对象本身
}
class OuterClass {
companion object CompanionObjectName {
val name = "伴生对象属性"
fun companionFun() {
println("调用伴生对象方法")
}
}
}
4. 오브젝트의 이름을 생략 컴패니언
당신이 연관된 객체 자체를 얻으려면 객체 이름을 생략 할 수 동반자, 연관된 객체 이름이 생략되고, 동반자 얻을 수 있습니다.
fun main() {
println(OuterClass.name)//伴生对象属性
OuterClass.companionFun()//调用伴生对象方法
OuterClass.Companion//通过Companion获取伴生对象本身
}
class OuterClass {
companion object {
val name = "伴生对象属性"
fun companionFun() {
println("调用伴生对象方法")
}
}
}
5. 동반자 객체 연장 부재
객체가 이름과 관련된 경우 객체는 "을 통해, 연장 부재 연관되어 객체 관련 회원의 외부 클래스 이름 .. "확장하는 방법;
객체 "를 통해, 이름이 연결되지 않은 경우 외부 클래스 .Companion.의 회원 "방법 확장
fun main() {
println(OuterClass.name)//伴生对象属性
OuterClass.companionFun()//调用伴生对象方法
println(OuterClass.extraParam)//为伴生对象扩展属性
OuterClass.test()//为伴生对象扩展方法
}
class OuterClass {
companion object {
val name = "伴生对象属性"
fun companionFun() {
println("调用伴生对象方法")
}
}
}
/**
* 为伴生对象扩展方法
*/
fun OuterClass.Companion.test() {
println("为伴生对象扩展方法")
}
/**
* 为伴生对象扩展属性
*/
val OuterClass.Companion.extraParam: String
get() = "为伴生对象扩展属性"