java中这个和超级关键字的区别(更多高级信息)

时间:2015-11-12 13:47:05

标签: java keyword

我知道这个关键字用于调用特定类中的当前构造函数。但我有另一种情况需要更多地了解它。下一个代码显示了这个和超级关键字的使用:

public class Stack {
    public void push()
    {
       /* do something */
    }

    public boolean full()
    {
       /* do something */
    }
}

,另一个类是:

public class ProtectedStack extends Stack {

    public void push()
    {
        if (this.full()){----}
        else
        {
            super.push();
        }
    }
}

我想知道在这种情况下会发生什么。

2 个答案:

答案 0 :(得分:2)

this.full()full()完全相同。它在full()实例上调用方法ProtectedStack。此方法可能可以直接在ProtectedStack类中声明,也可以继承。在您的代码中,看起来方法full()是从父类Stack继承的,因为ProtectedStack不会覆盖它。

关于super.push(),这将始终调用在最近的父类中实现的方法push()。即使在ProtectedStack中覆盖了此方法,也会调用父方法。

基本上:

  • this.method():在此对象上调用方法method(),因此在此类中搜索该方法,然后在父类等上搜索该方法。如果此类覆盖它,那么这个将是调用。如果没有,将调用父母的那个,等等。
  • super.method():始终调用父类的方法method(),即使此类重写它也是如此。

答案 1 :(得分:1)

非常明确this调用当前对象的方法,而super调用当前对象的父方法(注意在调用期间方法是以递归的方式搜索,直到找到它。)。

来自评论,在您的情况下,因为您没有在子类full()上实现this.full()方法,full()super.full()是相同的

同样,this.full()full()始终相同,请勿使用this.full()模式以尽量减少混淆。