This is a very important general question in interviews. First of all you may look following table to identify main differences between Interfaces and Abstract classes.
| Interface | Abstract class |
| If you only have SRS, it is better to use interfaces. This is the first stage of creating an application. | If application is being created partially, then it is better to use abstract classes. |
| Every methods in interfaces are already public and abstract. | Abstract classes may have both abstract and concrete methods. |
| It cannot be used private, protected, static, final, native... with interfaces | Any access or non access modifier can be used with abstract classes. |
| Every variable inside interface are always public, static and final | No restrictions |
| Serialization cannot be applied to interfaces. Because serialization is convert objects into series of bytes. But we cannot create objects using interfaces. Then serialization cannot be applied to interfaces. | No restrictions |
| private, protected access modifiers cannot be used for variables in interface. | No restrictions |
| Variables should be initialized at the time of declaration. | No restrictions |
| Instance and static blocks are not applicable for interfaces. | No restrictions |
| Constructors are not allowed in interfaces Because variables are already static and initialized and static. | No restrictions |
Then lets move into real world problem. I'm going to create two concrete classes, one abstract class and one interface. Here you can see them.
Human.java interface
package com.app.demo;
public interface Human {
public void eat();
public void walk();
public void work();
}
OtherHuman.java abstract class
package com.app.demo;
public abstract class OtherHuman {
public void eat(){};
public void walk(){};
public void work(){};
}
Employee.java class
package com.app.demo;
public class Employee implements Human {
@Override
public void eat() {
}
@Override
public void walk() {
}
@Override
public void work() {
}
}
Student.java class
package com.app.demo;
public class Student extends OtherHuman {
@Override
public void eat() {
}
@Override
public void walk() {
}
}
Then you may read this. This is very simple demonstration.
- I have mention three methods, eat(), walk() and work() In both Human interface and OtherHuman abstract class.
- You know, methods are called behaviors of objects.
- Then Employee can have all those behaviors eat, walk and work. But Student can have only eat and walk. Because I assume student don't have a job.
When to use Interfaces and Abstract classes ?
- If you implement any interface, you have to override each and every methods which are in implemented interface.
- In this example if you implement Human interface to Student, then it have to override all those methods including work() also.
- You cannot avoid overrinding work() method if you are implementing Human interface.
- So this is the time to use abstract classes.
- If you use OtherHuman abstract class instead of using Human interface, then you can choose whatever methods which you need to be included to Student class.
- That is why I extended OtherHuman abstract class to Student class.
- Then I can override eat() and walk() without work() method.
So I think now you have a good idea about the difference between interfaces and abstract classes. Hope you can understand.
Interfaces Vs Abstract classes
Reviewed by Ravi Yasas
on
2:13 PM
Rating:
Reviewed by Ravi Yasas
on
2:13 PM
Rating:

No comments: