Трудно объяснить словом, что я ищу, но, надеюсь, приведенного ниже примера кода с комментариями будет достаточно. По сути, я хочу, чтобы строка SubClass sc = new Subclass().method1()
возвращала экземпляр подкласса.
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()
РЕДАКТИРОВАТЬ: ---------------------------- сценарий использования ------------ -------------------
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
Первое, что вы заметите, это то, что способ sbrattla позволяет мне вызывать эти методы .audDate () .xxx () в любом порядке. С помощью приведенной выше конструкции класса вы вынуждены вызывать метод в последнем подклассе (или использовать действительно уродливое приведение)