As with many inheritance problems, I find it hard to explain what I want to do. But a quick (but peculiar) example should do the trick:
public interface Shell{
    public double getSize();
}
public class TortoiseShell implements Shell{
     ...
     public double getSize(){...} //implementing interface method
     ...
     public Tortoise getTortoise(){...} //new method
     ...
}
public class ShellViewer<S extends Shell>{
     S shell;
     public ShellViewer(S shell){
         this.shell = shell;
         ...
     }
}
public class TortoiseShellViewer<T extends TortoiseShell> extends ShellViewer{
    public TortoiseShellViewer(T tShell){
         super(tShell); //no problems here...
    }
    private void removeTortoise(){
        Tortoise t = tShell.getTortoise(); //ERROR: compiler can not find method in "Shell"
        ...
    }
}
The compiler does not recognise that I want to use a specific implementation of Shell for getTortoise(). Where have I gone wrong?
Based on what you've given here, the problem is that:
public class TortoiseShellViewer<T extends TortoiseShell> extends ShellViewer
does not specify ShellViewer (which is generic) correctly. It should be:
public class TortoiseShellViewer<T extends TortoiseShell> extends ShellViewer<T>
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With