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() );
   
}
}