If the principle is applied, high-level classes are not affected by any changes to low-level classes.
In addition, high-level classes can be reused in any context that defines lower-level classes that implement an abstract interface defined in upper-level classes.