- 伴生对象的属性和方法继承与使用:
- 在这种继承体系下,伴生对象的属性和方法并不会像类的成员那样被继承。伴生对象是与类紧密关联但独立于类实例的实体。
- 对于基类
Base
的伴生对象,它的属性和方法可以通过Base.属性名
或Base.方法名()
来访问,因为伴生对象与类共享相同的命名空间。
- 子类
Sub
虽然继承自Base
,但不能直接通过Sub
访问Base
伴生对象的属性和方法,仍需通过Base
来访问。例如,如果Base
伴生对象有一个方法create()
,访问方式是Base.create()
,而不是Sub.create()
。
- 子类重写伴生对象方法:
- 操作方式:在Kotlin中,伴生对象的方法不能像类的成员方法那样被重写。如果子类需要类似的功能,它需要在自己的伴生对象中定义同名方法。例如:
open class Base {
companion object {
open fun someMethod() {
println("Base companion object method")
}
}
}
class Sub : Base() {
companion object {
fun someMethod() {
println("Sub companion object method")
}
}
}
- 注意事项:
- 这里子类
Sub
伴生对象中的someMethod
并不是对Base
伴生对象中someMethod
的重写,而是一个新的方法,与Base
伴生对象中的方法没有继承关系。
- 调用时要明确通过对应的类来调用,
Base.someMethod()
调用的是Base
伴生对象的方法,Sub.someMethod()
调用的是Sub
伴生对象的方法。
- 由于不是重写关系,所以不存在多态行为。在运行时,根据调用的类确定执行哪个伴生对象的方法,而不像类的成员方法那样根据对象的实际类型确定执行哪个重写方法。