Java 泛型 - 重写抽象方法并具有子类的返回类型

2024-05-14

我正在尝试创建一个设置,其中一组子类覆盖超类。这个超类包含一个抽象方法 - 理想情况下,其返回类型是调用该方法的对象的返回类型,这样它的有效行为如下:

public abstract class SuperClass{
  public abstract SuperClass getSelf();
}

public class SubClass extends SuperClass{
  @Override
  public SubClass getSelf(){
    return this;
  }
}

我不确定这样的事情是否可能,因为我认为返回类型必须始终相同才能使覆盖起作用 - 然而我一直在思考答案,如果存在的话,就位于这条线上的某个地方......

public abstract class SuperClass{
  public abstract <? extends SuperClass> getSelf();
}

public class SubClass extends SuperClass{
  @Override
  public SubClass getSelf(){
    return this;
  }
}

谢谢你的帮助。

编辑:添加将超类扩展到子类,呃


这将起作用:

public abstract class SuperClass{
  public abstract SuperClass getSelf();
}

public class SubClass extends SuperClass{
  @Override
  public SubClass getSelf(){
    return this;
  }
}

注意我已经添加了extends SuperClass给你的SubClass定义。返回类型为getSelf被称为协变返回类型 http://en.wikipedia.org/wiki/Covariant_return_type.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 泛型 - 重写抽象方法并具有子类的返回类型 的相关文章

随机推荐