可能重复:
Overriding return type in extended interface - Bad idea?
让我们考虑以下界面,
public interface Cat{
public Object getCat();//returns any type of object
}
public interface DomesticCatInterface{
public String somethinOnlyRelatedToDomesticCat();
}
public interface WildCatInterface{
public String somethinOnlyRelatedToWildCat();
}
public class DomesticCat implements Cat, DomesticCatInterface{
@Override
public DomesticCat getCat(){
return this;
}
@Override
public String somethinOnlyRelatedToDomesticCat(){
return "something";
}
}
public class WildCat implements Cat, WildCatInterface{
@Override
public WildCat getCat(){
return this;
}
@Override
public String somethinOnlyRelatedToWildCat(){
return "something";
}
}
这是一个很好的做法,当我需要从类中获取引用时?
答案 0 :(得分:2)
不是让getCat()返回一个Object,而是让它返回一个Cat。这应该能够返回任何实现Cat的类。在java 5中,这称为Co-variant return types
答案 1 :(得分:2)
正如每个人写的那样,可以缩小返回类型。
但是对于你的最后一行问题,如果这是一个获得参考的好方法,答案是否定的。 你不会得到一个 new 对该对象的引用,但是对于调用对象(坦率地说 - 你已经有一个实例),它只会指向同一个东西。
使用new
关键字获取新实例。
答案 2 :(得分:0)
是的,有可能(因为Java 5,我相信)在覆盖它时缩小(不加宽)方法的返回类型。
我会说它,当它有助于使你的代码更清洁。
请注意,仍然无法缩小(或扩大)方法参数的类型。
您可能也对using self-referential generics感兴趣,强制执行您的界面。