I feel you have mixed up the terms interface, abstract class and non-abstract class.
Interface defines the contract between 2 objects such that they can communicate with. If class A implements interface IA, and B wanna invoke a method in class A, B can look at the interface IA to see what methods/functions are provided by class A, and then call the corresponding methods.
You may find Interface is not much helpful, if all methods in class A is public, since B can see all methods in A without IA. However, A may not wanna to disclose all methods to others (like private and protected methods), and thus, interface allows A to define the methods that are going to be disclosed.
Abstract class, similar to Interface, usually define the skeleton of its subclasses. For example, ANIMAL is an abstract class. An animal should be able to eat and walk. However, different animals use different ways to eat and walk. Say, dogs uses months only, but human may use folk and
spoon. Thus, Abstract class defines what MUST be able to do by an animal. If any subclass wanna be an animal, like human, birds, dogs, etc, they MUST define their own way for eat and walk!
Hope this clear.
Nick
SCJP 1.2, OCP 9i DBA, SCWCD 1.3, SCJP 1.4 (SAI), SCJD 1.4, SCWCD 1.4 (Beta), ICED (IBM 287, IBM 484, IBM 486), SCMAD 1.0 (Beta), SCBCD 1.3, ICSD (IBM 288), ICDBA (IBM 700, IBM 701), SCDJWS, ICSD (IBM 348), OCP 10g DBA (Beta), SCJP 5.0 (Beta), SCJA 1.0 (Beta), MCP(70-270), SCBCD 5.0 (Beta), SCJP 6.0, SCEA for JEE5 (in progress)