Book b1 = new Book(); Book methods: read(); Book b2 = new CirculatingBook(); CirculatingBook methods: getLocation(); checkout(); b1.read(); b2.read(); ************************************* CirculatingBook cb1 = new CirculatingBook(); CirculatingBook cb2 = new Book(); // NOT going to work cb1.getLocation(); cb1.checkout(); cb2.getLocation(); cb2.checkout(); ***************** You can always assign a subclass object to a superclass variable. Why? Because Java is going to expect the superclass variable to do superclass things. And the subclass object can indeed do all of the superclass things. But you can never assign a superclass object to a subclass variable. Why? Because Java is going to expect the subclass variable to do subclass things. But the superclass object cannot do all of the subclass things!