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

Saa*_*bal -2 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()
Run Code Online (Sandbox Code Playgroud)

如果我使用父类的引用变量创建子类的对象,例如

Parent parentRef = new Child()
Run Code Online (Sandbox Code Playgroud)

然后,“ this”表示Parent类的onResume()方法中的Child对象,当我们在Parent中调用show()方法时,它将调用Child类的show()方法。

请让我弄清楚为什么会这样。据我所知,“ this”是指该类的当前对象,所以在这里为什么“ this”是指Parent类的Child对象。因此,请提供详细的内部详细信息。提前致谢。

Era*_*ran 5

this引用当前实例。如果创建的实例ChildthisChild无论是this在父类代码还是子类代码中编写,运行时类型均为。

如果你调用this.someMethod()Parent类代码,如果someMethod是通过覆盖Child类的Child类方法将被执行。