Methods are not shadowed, the are overridden, so we get object-oriented behavior. Recall that overloading is when you have the same method with a different signature. You can't cast overridden methods the same as shadowed variables, but you can use super syntax. If a method is declared final, then it cannot be overridden. Abstract classes cannot be instantiated only extended.
Abstract classes have no definition.
If a class has one abstract method, then the class is abstract. However you can create a class using an interface modifier. Interfaces create new data types. You can 'implements' mutliple interfaces.