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

Subclass calling a superclass method using "this"

提问人:Bob 提问时间:11/6/2019 最后编辑:smac89Bob 更新时间:11/6/2019 访问量:1257

问:

如果超类有一个使用关键字“”的方法,并且子类调用此方法,那么使用“”的超类方法是否引用子类对象?thisthis

Java 继承 扩展 超类

评论

0赞 Ruelos Joel 11/6/2019
不可以,继承是父项的唯一子项,父项将无法访问子项方法
3赞 Vikram Singh 11/6/2019
这始终引用当前对象,无论它是父类还是子类。如果子类调用父类的方法,则将引用子类对象。但是你不能在 parent 中调用子类的对象。this
1赞 smac89 11/6/2019
Inheritance 和“this”关键字的可能重复项

答:

0赞 Jinesh Francis 11/6/2019 #1

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

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

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

0赞 Kris 11/6/2019 #2

this始终引用 self 对象。即,如果 child 使用 reference,则指向 child。如果父项使用 ,则指向父项。thisthis

如果找不到对自我中需要的东西的引用,那么它会在父项中寻找引用。this

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

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

0赞 ardhani 11/6/2019 #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

希望下面的例子能让你清楚。