public class Main
{
public interface Printer
{
void print ();
}
public interface Calculator
{
void calc ();
}
public static class MyPrinter implements Printer
{
@Override public void print ()
{
System.out.println ("MyPrinter");
}
}
public static class MyPrintingCalculator implements Printer, Calculator
{
@Override public void print ()
{
System.out.println ("MyPrintingCalculator");
}
@Override public void calc ()
{
System.out.println ("Calculating");
}
}
public static <T extends Calculator & Printer > void process (T something)
{
something.print ();
something.calc ();
}
public static void process (Printer something)
{
something.print ();
}
public static void main (String args[])
{
final MyPrinter printer = new MyPrinter ();
final MyPrintingCalculator calculator = new MyPrintingCalculator ();
process (printer);
process (calculator);
}
}