Part 2 - Why you need them? Technically you don't "need" abstract classes. But for Buildings, which is more ideal - you have to code every House, Mall, Jail, Restaurant with numberOfFloors, numberOfDoors, numberOfWindows or you simply have every House, Mall, Jail, Restaurant extend Building which will ensure they all have numberOfFloors, numberOfDoors, numberOfWindows simply by inheritance.
Interfaces aren't "needed" either but they do provide something of a guarantee. With the calculator example, if you implement my interface which says you must implement an add method that returns an integer result, I am at least guaranteed that the result given is an integer. Again, your implementation of add may actually subtract, but at least the returned answer will be of the data type I am expecting, which reduces errors.