Q:

What is the difference between explicitly writing public and not writing public? 

I thought there was no difference but then I encountered this:
public class Whatever
{

 String toString()  
{
//stuff
}

}

This code results in the compiler error: 

toString() in Whatever cannot override toString() in java.lang. Object; attempting to assign weaker access privileges; was public

If I explicitly type public String toString() the code compiles just fine. 

A:

If you don't use the public access specifier for methods and fields, they are assumed to be under package-level visibility. 
Here is a nice diagram of what package and public mean in terms of visibility outside of your class:
Modifier       Class    Package   Subclass  World
----------------------------------------------------------
public           Y         Y         Y        Y       
protected        Y         Y         Y        N
no modifier      Y         Y         N        N       <--- This is package level
private          Y         N         N        N

Y means that the method, class, or field is visible. 
N means that the method, class, or field is not visible

