n4r*_*zul 1 java polymorphism inheritance
很难用语言解释我所追求的内容,但希望下面的代码示例带有注释就足够了.基本上我希望该SubClass sc = new Subclass().method1()行返回Subclass实例.
public class SuperClass {
public SuperClass method1()
{
//do whatever
return this
}
}
public class SubClass extends SuperClass {
//we inherit method 1
//method2
public SubClass method2()
{
//do whatever
return this
}
}
//succesfully returns instance of Sublass, but...
SubClass sc = new Subclass().method2()
//...the following line returns an instance of SuperClass and not Sublass
//I want Sublass's instance, without having to using overides
//Is this possible?
SubClass sc = new Subclass().method1()
Run Code Online (Sandbox Code Playgroud)
编辑:----------------------------用例场景------------------ -------------
Message myMessage = new ReverseTransactionMessageBuilder()
.policyNo(POLICY_NO) //on ReverseTransactionMessageBuilder
.audUserId(AUD_USER_ID) //on inherited MessageBuilder
.audDate(new Date()) //on inherited MessageBuilder
.processNo(EProcessConstants.FINANCE_MANUAL_ADJUSTMENT.getProcessCd()) //on inherited MessageBuilder
.serviceName("finance.ProcessReversalCmd") //on inherited MessageBuilder
.create(); //create is overridden so this is ReverseTransactionMessageBuilder
Run Code Online (Sandbox Code Playgroud)
你要注意的第一件事是sbrattla方式允许我以任何顺序调用这些.audDate().xxx()方法.使用上面的类构造,你被迫最后调用sublcass上的方法(或使用一个非常丑陋的演员)
您需要执行以下操作:
public class SuperClass<T> {
public T method1() {
return (T) this;
}
}
public class SubClass extends SuperClass<SubClass> {
public SubClass method2() {
return (SubClass) this;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以在" 泛型简介 "中阅读有关Java泛型的更多信息,但简要说明您告诉SuperClass将返回的实例强制转换为表示您定义的类型的T. 在这种情况下,它是SubClass.