使用“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”调用超类方法的子类的主要内容,如果未能解决你的问题,请参考以下文章