Notes from “Sun Certified Programmer for Java 6 Study Guide”

1. The static modifier is used to create variable and methods that will exist independently of any instances created for the class. All static members exist before you ever make a new instance of a class, and there will be only one copy of a static member regardless of the number of instances of that class. In other words, all instances of a given class share the same value for any given static variable.

2. Polymorphic method invocations apply only to instance methods.  You can always refer to an object with a more general reference variable type ( a superclass or interface), but at runtime, the ONLY thing that are dynamically selected based on the actual object(rather than the reference type) are instance methods Not static methods. Not variables. Only overridden instance methods are dynamically invoked based on the real object's type.
Example:

class Mammal{
    String name = "furry ";
    String makeNoise(){
        return "generic noise";
    }
}
class Zebra extends Mammal{
    String name = "stripes ";
    String makeNoise(){
        return "bray";
    }
}
public class ZooKeeper {
    public static void main(String[] args){
        new ZooKeeper().go();
    }
    void go(){
        Mammal m = new Zebra();
        System.out.println(m.name + m.makeNoise());
    }
}
Result: furry bray

3. A reference variable's type determines the methods that can be invoked on the object the variable is referencing.

4. A reference variable can be declared as a class type or an interface type. If the variable is declared as an interface type, it can reference any object of any class that implements the interface.

5. To summarize, which overridden version of the method to call is decided at runtime based on object type, but which overloaded version of the method to call is based on the reference type of the argument passed at compile time.

6. Cohesion is the OO principle most closely associated with making sure that a class is designed with a single, well-focused purpose.

Encapsulation is the OO principle most closely associated with hiding implementation details.

Coupling is the OO principle most closely associated with making sure that classes know about other classes  only through their APIs.

Polymorphism the OO principle most closely associated with allowing a single object to be seen as having many types.

Category >> Classes & Interfaces  
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
<pre><code> 
String foo = "bar";
</code></pre>