abstract class Number 
{
    static int value() { return 0; }
    
    int virtual() { return this().value(); }
    //int virtual() { return this.value(); }
    
    @Override public String  toString()
    {
        final String type = getClass().getSimpleName();
        return String.format("%s: static(%d) - virtual(%d)",
                type, value(), virtual());
    }
}

class One extends Number 
{
    @Override static int value() { return 1; }

    //@Override int virtual() { return this.value(); }    
}

class Two extends Number 
{    
    @Override static int value() { return 2; }

    //@Override int virtual() { return this.value(); }
}

class Example
{    
    public static void main(String... args) {
        System.out.println( new One() );
        System.out.println( new Two() );
    }
}
