Question: I have an abstract class say **CTest** which contains only the abstract method f1() and nothing else. Similiarly, i have a Interface **ITest** with the only method f1(). Here both the CTest abstract class and ITest interface does the same thing. 

**The one difference is that**, the Interface provides the flexibility that it can be implemented in any classes which already derived from other class but abstract classes cannot. 

Apart from the above difference, What is the actual difference between these two? and which one is efficient here(CTest or ITest)? When i should use what? Any specific scenario's in OO Design and any general suggessions on this are helpful

Answer: 
In `Java` prefer `Interfaces` to `Abstract Classes`. Refer Item 18 in **Effective Java**

![enter image description here](https://i.stack.imgur.com/pPyV1.jpg)

**Main Points** :

* Existing classes can be retroffited to implement a new interface.
* Interfaces are ideal for defining mixins.
* Interfaces allow the construction of nonheirarchical type frameworks.
* Interfaces enable safe, powerful functionality enhancements.
in c# it allows only single level inheritance. therefore interfaces can be use to do multiple inheritances

and also for more details :

<http://www.dotnetfunda.com/forums/thread4085-difference-between-interface-and-abstract-class.aspx>

<http://sadi02.wordpress.com/2008/05/08/what-is-difference-in-an-abstract-class-and-an-interface/>