I have several classes that extend the same one abstract class Encoder. For an abstract class, its children must override the abstract method, which takes a typical typed parameter ( Subscriber<T>in this example). Each subclass that overrides this method uses a different type for this.
abstract class Encoder<T> {
protected String mSomeArg;
public Encoder(String someArg) {
mSomeArg = someArg+" super";
}
public abstract void start(Subscriber<T> subscriber);
}
class ExampleEncoder extends Encoder {
public ExampleEncoder(String arg) {
super(arg);
}
@Override
public void start(Subscriber<Message> subscriber) {
Message msg = new Message("hi "+mSomeArg);
subscriber.event(msg);
}
}
Usage example:
Encoder sample = new ExampleEncoder();
sample.start(new Subscriber<Message>() {
@Override
public void event(Message msg) {
Log(msg.text());
}
});
Encoder otherSample = new OtherEncoder();
sample.start(new Subscriber<OtherThing>() {
@Override
public void event(OtherThing thing) {
Log(thing.toString());
}
});
Question: How can each subclass call its own super()with the common type that is required for this abstract method?
. Subscriber<?> . , (: new ExampleEncoder<Message>()) ,