如何使Superclass方法返回SubClass的实例

我有一个名为Test的类和一个名为SubTest的类,它扩展了Text ,我想在Test类中有一个方法,它会在调用时返回SubTest的实例,我想这样做:

 SubTest test = new SubTest().setTest("Hello!").setOtherTest("Hi!"); 

setTest()setOtherTest()方法应该在Test类中。

但当我这样做时:

 public Test setTest(String test) { return this; } 

它只返回Test的实例,所以我必须将TestSubTest ,但我不想这样做。

可能吗 ? 如果有,怎么样?

谢谢,MinusKube。

让方法返回其所有者( this )以便能够“链接”多个方法调用称为fluent API 。 您可以使用generics来解决您的问题,尽管结果代码可能在某种程度上不太可读:

 public class Person> { public T setName(String name) { // do anything return (T)this; } } public class Student extends Person { public Student setStudentId(String id) { // do anything return this; } } public class Teacher extends Person { public Teacher setParkingLotId(int id) { // do anything return this; } } 

现在,您不需要任何演员表:

 Student s = new Student().setName("Jessy").setStudentId("1234"); Teacher t = new Teacher().setName("Walter").setParkingLotId(17); 

另请参阅: 使用generics在Java中构建Fluent API

这些方法可以返回SubTest ,因为Java的返回类型是协变的。

您必须覆盖这些方法,以便您可以在SubTest返回this SubTest ,例如:

 @Override public SubTest setTest(String message) { super.setTest(message); // same functionality return this; }