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?
 
     
    