为什么类会返回自己的实例?

时间:2014-02-25 13:59:56

标签: java polymorphism

我有一个抽象类..

public abstract class MHandle {
    public MHandle getMHandle(){
        return this;
    }
}

我还有另一个名为House的课程

public class House extends MHandle{
    public void methodA(){
    }
}

做什么就像

一样
public void methodA(){
    MHandle mh = getMHandle();
}

3 个答案:

答案 0 :(得分:5)

这之间绝对没有区别:

public void methodA(){
   MHandle mh = getMHandle();
   mh.toString();
}

和这个

public void methodA(){
   this.toString();
}

和这个

public void methodA(){
   toString();
}

和这个

public void methodA(){
   this.getMHandle().getMHandle().getMHandle().getMHandle().
      getMHandle().getMHandle().toString();
}

这种无差异在任何情况下都是正确的。内部到MHandle类或其具体子类(例如House),以及有或无权访问MHandle类的类。我没有看到完全拥有getMHandle()的重点,如果它只是返回一个自我引用而没有 做任何有用的事情

答案 1 :(得分:2)

一个方面可能是协方差:可以重写此方法以返回更具体的类型:

public abstract class MyMoreSpecificHandle extends MHandle {
    public MyMoreSpecificHandle getMHandle(){
        return this;
    }
}

还有一种类似于“getThis()技巧”的应用程序。它与协方差方面有关,并在此详细解释:http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#FAQ206

答案 2 :(得分:0)

这将返回House实例,因为它扩展了MHandle。

相关问题