I have a class that has a listener interface. I want to create a subclass with the listener interface being a subclass type. For example:
interface OnSadListener {
void imSad();
}
interface OnCryingListener extends OnSadListener {
void imCrying();
}
class Person {
OnSadListener listener;
void setListener(OnSadListener listener){
this.listener = listener;
}
}
class Baby extends Person {
OnCryingListener listener; // I want it to override the original one in Person
void cry(){
listener.imSad();
listener.imCrying();
}
}
void doIt(){
Baby michael = new Baby();
michael.setListener(new OnCryingListener() {
@Override void imSad(){
System.out.print("I'm sad");
}
@Override void imCrying(){
System.out.print("Wahhhhhh!");
}
});
michael.cry(); // the imCrying funtion is empty (setListener setted Person's listener and not Baby's)
}
I know Baby.setListener(new OnCryingListener(){...});
would work because OnCryingListener is a subclass of OnSadListener. But then I would not be able to call imCrying()
or it would be empty.
Is there a way for OnCryingListener listener
to "override" Person
's OnSadListener listener
?