Java 为什么“THIS”关键字表示父类方法中的子对象?

Java 为什么“THIS”关键字表示父类方法中的子对象?,java,inheritance,this,Java,Inheritance,This,我使用的是使用继承的子关系和父关系。我写了一段代码,在父类的方法中使用'THIS'关键字,在子类中重写相同的方法。当我使用'Super'关键字从子类重写的方法调用父类方法时,然后在父类方法中,'THIS'关键字表示子对象类,当我使用'THIS'关键字从父类方法调用一个方法时,它会调用子类方法。这个方法是相同的,并且在父类和子类中也可以使用重写 class Parent { void onResume() { println("Parent:OnResume" +

我使用的是使用继承的子关系和父关系。我写了一段代码,在父类的方法中使用'THIS'关键字,在子类中重写相同的方法。当我使用'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”表示父类的onResume方法中的子对象,当我们在父类中调用show方法时,它将调用子类的show方法

请让我解释一下为什么会这样。正如我所知,“this”指的是类的当前对象,所以这里为什么“this”指的是父类的子对象。 为此,请提供详细的内部信息。提前感谢。

这引用了当前实例。如果创建Child的实例,则该实例的运行时类型为Child,无论是在父类代码中还是在子类代码中编写


如果您在父类代码中调用this.someMethod,如果someMethod被子类重写,则子类方法将被执行。

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

没有这个关键字。但是,有一个表示当前对象的,当调用实例方法时。在这种情况下,这显然是一个儿童的例子。不清楚你在问什么。这里有两个对象,一个是我创建的子对象,另一个是内部创建的父类对象。那么,为什么在父类中不使用“this”关键字引用父类对象呢?密切相关:可能是重复的?或者,请为此提供详细的内部信息。这不是因为任何内部原因。这是因为语言规范这么说。如果我错了,请纠正我,因为我知道当我们创建子类对象时,内部父类对象也会被创建,所以为什么“this”不表示父类中的父对象?或者请告诉我是否应用了其他概念?@SaadBinIqbal您使用新的Child创建了一个Child实例。此实例具有子类和父类的属性,但其运行时类型为Child。因此,此对象的运行时类型始终为子对象。@SaadBinIqbal仅创建1个对象