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