What is the difference between Abstract class and Interface
Or
When should you use an abstract class, when an interface, when both?
Or
What is similarities/difference between an Abstract class and Interface?
Or
What is the difference between interface and an abstract class?
1. Abstract class is a class which contain one or
more abstract methods, which has to be implemented by sub classes.
An abstract class can contain no abstract methods
also i.e. abstract class may contain concrete methods. A Java Interface
can contain only method declarations and public
static final constants and doesn't contain their implementation. The
classes
which implement the Interface must provide the
method definition for all the methods present.
2. Abstract class definition begins with the keyword "abstract" keyword followed by Class definition. An Interface definition
begins with the keyword "interface".
3. Abstract classes are useful in a situation
when some general methods should be implemented and specialization
behavior
should be implemented by subclasses. Interfaces
are useful in a situation when all its properties need to be implemented
by
subclasses
4. All variables in an Interface are by default - public static final while an abstract class can have instance variables.
5. An interface is also used in situations when a
class needs to extend an other class apart from the abstract class. In
such
situations its not possible to have multiple
inheritance of classes. An interface on the other hand can be used when
it is required
to implement one or more interfaces. Abstract
class does not support Multiple Inheritance whereas an Interface
supports multiple
Inheritance.
6. An Interface can only have public members whereas an abstract class can contain private as well as protected members.
7. A class implementing an interface must
implement all of the methods defined in the interface, while a class
extending an abstract
class need not implement any of the methods
defined in the abstract class.
8. The problem with an interface is, if you want
to add a new feature (method) in its contract, then you MUST implement
those method
in all of the classes which implement that
interface. However, in the case of an abstract class, the method can be
simply implemented
in the abstract class and the same can be called
by its subclass
9. Interfaces are slow as it requires extra
indirection to to find corresponding method in in the actual class.
Abstract classes are fast
10.Interfaces are often used to describe the
peripheral abilities of a class, and not its central identity, E.g. an
Automobile class might
implement the Recyclable interface, which could apply to many otherwise totally unrelated objects.
Note: There is no
difference between a fully abstract class (all methods declared as
abstract and all fields are public static final) and an interface.
Note: If the various
objects are all of-a-kind, and share a common state and behavior, then
tend towards a common base class. If all they
share is a set of method signatures, then tend towards an interface.
Similarities:
Neither Abstract classes nor Interface can be instantiated.
What does it mean that a method or class is abstract?
An abstract class cannot be instantiated. Only
its subclasses can be instantiated. A class that has one or more
abstract methods must be
declared abstract. A subclass that does not
provide an implementation for its inherited abstract methods must also
be declared abstract.
You indicate that a class is abstract with the
abstract keyword like this:
public abstract class AbstractClass
Abstract classes may contain abstract methods. A
method declared abstract is not actually implemented in the class. It
exists only to be
overridden in subclasses. Abstract methods may
only be included in abstract classes. However, an abstract class is not
required to have any
abstract methods, though most of them do. Each
subclass of an abstract class must override the abstract methods of its
superclasses
or itself be declared abstract. Only the method’s
prototype is provided in the class definition. Also, a final method can
not be abstract and
vice versa. Methods specified in an interface are
implicitly abstract.
. It has no body. For example,
public abstract float getInfo()
What must a class do to implement an interface?
The class must provide all of the methods in the interface and identify the interface in its implements clause.
What is an abstract method?
An abstract method is a method whose implementation is deferred to a subclass.
What is interface? How to support multiple inhertance in Java?
Or
What is a cloneable interface and how many methods does it contain?
An Interface are implicitly abstract and public.
Interfaces with empty bodies are called marker interfaces having certain
property or behavior.
Examples:java.lang.Cloneable,java.io.Serializable,java.util.EventListener.
An interface body can contain constant declarations, method prototype
declarations,
nested class declarations, and nested interface
declarations.
Interfaces provide support for multiple
inheritance in Java. A class that implements the interfaces is bound to
implement all the methods defined in Interface.
Example of Interface:
public interface sampleInterface {
public void functionOne();
public long CONSTANT_ONE = 1000;
}
What is an abstract class?
Or
Can you make an instance of an abstract class?
Abstract classes can contain abstract and
concrete methods. Abstract classes cannot be instantiated directly i.e.
we cannot call the constructor
of an abstract class directly nor we can create an
instance of an abstract class by using
“Class.forName().newInstance()”
(Here we get java.lang.InstantiationException).
However, if we create an instance of a class that
extends an Abstract class, compiler will initialize both the classes.
Here compiler will implicitly
call the constructor of the Abstract class. Any
class that contain an abstract method must be declared “abstract” and
abstract methods can have
definitions only in child classes. By overriding
and customizing the abstract methods in more than one subclass makes
“Polymorphism” and through
Inheritance we define body to the abstract
methods.
Basically an abstract class serves as a template.
Abstract class must be extended/subclassed for it to be implemented. A
class may be declared
abstract even if it has no abstract methods. This
prevents it from being instantiated. Abstract class is a class that
provides some general functionality
but leaves specific implementation to its
inheriting classes.
Example of Abstract class:
abstract class AbstractClassExample{
protected String name;
public String getname() {
return name;
}
public abstract void function();
}
Example: Vehicle is an abstract class and Bus Truck, car etc are specific implementations
No! You cannot make an instance of an abstract class. An abstract class has to be sub-classed.
If you have an abstract class and you want to use a method which has been implemented, you may
need to subclass that abstract class, instantiate your subclass and then call that method.
What is meant by "Abstract Interface"?
Firstly, an interface is abstract. That means you cannot have any implementation in an interface.
All the methods declared in an interface are abstract methods or signatures of the methods.
How to define an Interface?
In Java Interface defines the methods but does not implement them. Interface can include constants.
A class that implements the interfaces is bound to implement all the methods defined in Interface.
Example of Interface:
public interface SampleInterface {
public void functionOne();
public long CONSTANT_ONE = 1000;
}
Can Abstract Class have constructors? Can interfaces have constructors?
Abstract class's can have a constructor, but you
cannot access it through the object, since you cannot instantiate
abstract
class. To access the constructor create a sub
class and extend the abstract class which is having the constructor.
Example
public abstract class AbstractExample {
public AbstractExample(){
System.out.println("In AbstractExample()");
}
}
public class Test extends AbstractExample{
public static void main(String args[]){
Test obj=new Test();
}
}
If interface & abstract class have same methods and those methods contain no implementation, which one would you prefer?
Obviously one should ideally go for an interface,
as we can only extend one class. Implementing an interface for a class
is
very much effective rather than extending an
abstract class because we can extend some other useful class for this
subclass