我有一个抽象类..
public abstract class MHandle {
public MHandle getMHandle(){
return this;
}
}
我还有另一个名为House的课程
public class House extends MHandle{
public void methodA(){
}
}
做什么就像
一样public void methodA(){
MHandle mh = getMHandle();
}
答案 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。