According the JLS, you cannot however due to a feature/bug in the Java 6/7 compiler (Oracle's JDK, OpenJDK, IBM's JDK) you can have different return types for the same method signature if you use generics.
public class Main {
public static void main(String... args) {
Main.print();
Main.print();
Main.print();
Main.print();
}
public static int print() {
System.out.println("here - Integer");
return 0;
}
public static short print() {
System.out.println("here - Short");
return 0;
}
public static byte print() {
System.out.println("here - Byte");
return 0;
}
public static void print() {
System.out.println("here - Void");
}
}
Prints
here - Integer
here - Short
here - Byte
here - Void
For more details, read my article here