Home | FAQ | Contact me

Abstract class—an example

This is a simple example.

BasePoop.java:
import org.apache.log4j.Logger;

public abstract class BasePoop< T >
{
    protected abstract Logger getLogger();
    protected abstract Class< T > getClazz();

    /* Now BasePoop can use getClazz() in all sorts of code that would benefit
     * Poopola and Crapola. T would be used wherever Poopola or Crapola are needed.
     */
    ...
}

Here are extending classes...

Poopola.java:
import org.apache.log4j.Logger;

public class Poopola extends BasePoop< Poopola >
{
    private static Logger log = Logger.getLogger( Poopola.class );

    /* must implement these methods to meet contract... */
    public Logger getLogger() { return log; }
    public Class< Poopola > getClazz() { return Poopola.class; }

    /* Poopla-specific methods */
    ...
}
Crapola.java:
import org.apache.log4j.Logger;

public class Crapola extends BasePoop< Crapola >
{
    private static Logger log = Logger.getLogger( Crapola.class );

    /* must implement these methods to meet contract... */
    public Logger getLogger() { return log; }
    public Class< Crapola > getClazz() { return Crapola.class; }

    /* Crapla-specific methods */
    ...
}