我正在使用继承的子级和父级关系。我编写了一个代码,在Parent类的方法中使用“ THIS”关键字,并且在Child类中覆盖了相同的方法。当我使用'Super'关键字从子类覆盖方法调用父类方法时,在父类方法中,'THIS'关键字表示子对象类,而当我使用'THIS'关键字从父类方法调用方法时,则调用子类方法(此方法是相同的,也可以在父子类中使用覆盖方法使用此方法。)
class Parent {
void onResume() {
println("Parent:OnResume" + this) // Here 'this' denotes Child class's Object
this.show() // here Child class's method is invoked
show() // here Child class's method is invoked as well
}
void show() {
println("Parent:Show")
}
}
class Child extends Parent {
override
void onResume() {
super.onResume()
println("Child:->OnResume" + this)
}
override
void show() {
println("Child:Show")
}
}
//Calling code
Parent parentRef = new Child()
parentRef.onResume()
如果我使用父类引用变量(如
)创建子类的对象,Parent parentRef = new Child()
然后'this'表示Parent类的onResume()方法中的Child对象,当我们在Parent中调用show()方法时,它将调用Child类的show()方法。
请让我弄清楚为什么会这样。据我所知,“ this”是指该类的当前对象,所以在这里为什么“ this”是指Parent类的Child对象。 因此,请提供详细的内部详细信息。预先感谢。
答案 0 :(得分:5)
this
引用当前实例。如果创建Child
的实例,则无论您在父类代码还是子类代码中编写this
,Child
的运行时类型都是this
。 / p>
如果在this.someMethod()
类代码中调用Parent
,则someMethod
类将覆盖Child
,则将执行Child
类方法。
答案 1 :(得分:0)
重写方法时,将覆盖被重写方法的功能。...除非子类从某个地方调用super.show()
。换句话说,孩子可以完全控制原始功能(覆盖的功能)是否仍然可用,以及和在何处可用。 (子级不仅限于从覆盖的super.show()
中调用show()
,还可以从其他方法和构造函数中调用它!)