This is a very common question that you can come across every Java Interview usually when you are looking for your first job.
Interfaces
Interface vs. abstract class
Interfaces
- Interfaces are contracts for what a class can do, but they say nothing about the way.
- Interfaces can be implemented by any class.
- An interface is 100% abstract class.
- No concrete methods are allowed.
- Can have constants, which are always implicitly public, static and final.
- A class implementing an interface can be abstract and it doesn't have to implement the interface
- Interfaces can extend one or more interfaces.
- Interfaces cannot extend a class.
- Interface methods must not be static.
- An abstract class can never be instantiated. Its sole purpose is to be extended.
- Methods marked abstract end in a semicolon rather than curly brackets.
- An abstract class can have both abstract and non-abstract methods.
Interface vs. abstract class
Choosing interfaces and abstract classes
is not an either/or proposition. If you need to change your design, make
it an interface.
However, you may have abstract classes
that provide some default behavior. Abstract classes are excellent
candidates inside
of application frameworks.
Abstract classes let you define some
behaviors; they force your subclasses to provide others. For example, if
you have an
application framework, an abstract class
may provide default services such as event and message handling. Those
services allow
your application to plug in to your
application framework. However, there is some application-specific
functionality that
only your application can perform. Such
functionality might include startup and shutdown tasks, which are often
application-dependent.
So instead of trying to define that
behavior itself, the abstract base class can declare abstract shutdown
and startup methods.
The base class knows that it needs those
methods, but an abstract class lets your class admit that it doesn't
know how to
perform those actions; it only knows that
it must initiate the actions. When it is time to start up, the abstract
class can
call the startup method. When the base
class calls this method, Java calls the method defined by the child
class.
No comments:
Post a Comment