是否可以将抽象方法的返回类型设置为与类相同?

时间:2019-06-13 23:20:43

标签: java generics inheritance

我想将抽象方法的返回类型设置为与类相同,而不是抽象类的类型,但与继承类的类型相同。

2 个答案:

答案 0 :(得分:3)

您可以使用自我输入模式:

abstract class A<T extends A<T>> {
    abstract T foo();
}

class B extends A<B> {
    B foo() {
        return this;
    }
}

答案 1 :(得分:0)

所有这三个功能都完全相同。

public class TestAbstract {
   public static void main(String[] args) {
      B b1 = new B();
      A a1 = b1.getMyClass();
      System.out.println(a1.getClass().getName());
      A a2 = b1.getItThisWay();
      System.out.println(a2.getClass().getName());
      A a3 = b1;
      System.out.println(a3.getClass().getName());
   }
}

abstract class A {
   abstract public A getMyClass();
}

class B extends A {
   public A getMyClass() {
      return this;
   }

   public A getItThisWay() {
      return this;
   }
}