我想将抽象方法的返回类型设置为与类相同,而不是抽象类的类型,但与继承类的类型相同。
答案 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;
}
}