为什么“ THIS”关键字将Child对象表示为Parent类的方法?

时间:2019-07-18 10:29:38

标签: java inheritance this

我正在使用继承的子级和父级关系。我编写了一个代码,在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对象。 因此,请提供详细的内部详细信息。预先感谢。

2 个答案:

答案 0 :(得分:5)

this引用当前实例。如果创建Child的实例,则无论您在父类代码还是子类代码中编写thisChild的运行时类型都是this。 / p>

如果在this.someMethod()类代码中调用Parent,则someMethod类将覆盖Child,则将执行Child类方法。

答案 1 :(得分:0)

重写方法时,将覆盖被重写方法的功能。...除非子类从某个地方调用super.show()。换句话说,孩子可以完全控制原始功能(覆盖的功能)是否仍然可用,以及在何处可用。 (子级不仅限于从覆盖的super.show()中调用show(),还可以从其他方法和构造函数中调用它!)