Single responsibility principle

Open-closed principle

Liskov substitution principle

public void someMethod(SuperClass sc) {
    sc.someMethod();
}

someMethod( new SubClass() );

Interface segregation principle

Dependency inversion principle