使用“this”调用超类方法的子类

Posted

技术标签:

【中文标题】使用“this”调用超类方法的子类【英文标题】:Subclass calling a superclass method using "this" 【发布时间】:2020-03-02 13:07:42 【问题描述】:

如果超类有一个使用关键字“this”的方法,子类调用这个方法,那么使用“this”的超类方法会引用子类对象吗?

【问题讨论】:

不,继承是父级的唯一子级,父级将无法访问子方法 这总是指当前对象,无论它是父类还是子类。如果子类调用父类的方法,那么this 将引用子类对象。但是不能在父类中调用子类的对象。 Inheritance and the "this" keyword的可能重复 【参考方案1】:

不,this 将始终引用我们正在使用它的类的实例。

如果我们在父类中使用this,它将总是返回父类 实例。

如果要在父类方法中使用子类的this,请重写父类的方法。

【讨论】:

【参考方案2】:

this 总是引用 self 对象。即,如果孩子使用this 引用,它指向孩子。如果父级使用this,则它指向父级。

如果this 在self 中找不到对所需内容的引用,那么它会在parent 中查找引用。

我怀疑您的困惑来自方法覆盖,其中父母可能会使用 this 调用方法,但子中的方法会被执行。这是因为,总是在子对象中创建的对象。所以this 在这种情况下指向孩子。

简单地说,this 指向被实例化的类的实例。如果该实例不包含引用的实体,则在父级(如果有)上进行查找

【讨论】:

【参考方案3】:

类中的关键字this 将始终引用该对象。

为了更好地理解,我创建了几个示例类。

父类

public class TestClass
    public void func()
        this.cFunc();
        System.out.println("In Parent");
    

    public void cFunc()
        System.out.println("cFunc in parent");
    

儿童班

public class TestClassChild extends TestClass
    public void cFunc()
        System.out.println("cFunc in child");
    

案例

1) 使用子类引用访问的子对象

TestClassChild tc = new TestClassChild();
tc.func();
输出
cFunc in child - Child method is called
In Parent

2) 使用父类引用访问的子对象

TestClass t = new TestClassChild();
t.func();

输出
cFunc in child - Irrespective if it was referenced by parent still child method got called. 
In Parent

3) 使用父类引用访问的父对象

TestClass tp = new TestClass();
tp.func();

输出
cFunc in parent - Parent function got called.  
In Parent

希望下面的例子能让你明白。

【讨论】:

以上是关于使用“this”调用超类方法的子类的主要内容,如果未能解决你的问题,请参考以下文章

Java多态如何调用子类对象的超类方法

8- 类

从超类调用子类的方法

如果子类调用超类方法,将使用其字段的 Java

从超类调用子类方法

是否可以在超类对象上调用子类的方法?