These are two different concepts which can be explained easily by a novice having a little bit knowledge of abstract classes and interfaces.
It is advised to read abstract classes before going through this topics. It gives thorough understanding of abstract classes where some concepts you may not aware of, perhaps.
Before going further let us know the difference between constructor and a method.
Abstract class constructor
1. What is the difference between a constructor and method?
A constructor is called implicitly whenever an object is created. But a method is to be called explicitly.
A constructor cannot be static but a method can be. When the following code is compiled. the compiler complains "modifier static not allowed here".
public class Demo extends Test
{
public static Demo() {}
}
2. Can an abstract class have a constructor?
Yes, it can have and moreover can be overloaded as constructor is special type of method where return type is missing (and class name and constructor name should be same).
Following program compiles successfully and executes happily.
abstract class Test
{
public Test()
{
this("way2java.com");
System.out.println("Abstract class default constructor");
}
public Test(String str)
{
System.out.println("My name is " + str);
}
}
public class Demo extends Test
{
public static void main(String args[])
{
new Demo();
}
}
The above program proves an abstract class can have constructors. The same technique of "this" can be used to access another constructor as in concrete classes.
Using subclass constructor, the super class abstract methods are accessed. The principle used is subclass constructor calls superclass default constructor implicitly.
Interface abstract
3. Can an interface be abstract?
Infact, interface is an abstract class with one restriction – all methods should be abstract. With this small constraint, designers allowed multiple inheritance. Declaring an interface as abstract (not allowed by the compiler) does not carry any special meaning as interface implicitly is an abstract class.
4. Can an interface have constructors?
Sorry, not possible as constructor is nothing but a concrete (non-abstract) method that carries a body. Interface cannot have concrete methods.
What access modifiers a constructor cannot be?
"A constructor cannot be abstract, static, final, native, strictfp, or synchronized". Explained clearly in Java Constructor Properties
1. One mind teasing concept: Can you get objects of Abstract classes?
2. One more mind teasing concept: Can you get objects of Interfaces
Answer for the above two questions is "YES".
very helpful and simple
Very good site…
Tell your friends also to derive good knowledge of it.
hi sir can you please explain me this line “subclass constructor calls superclass default constructor implicitly” why?
If any variables and objects are initialized in the super class constructor, they may be required by the sub class. For this, designers calls super class constructor.
its very useful web site
Declaring an interface as abstract is allowed by the compiler.
public abstract interface Inter {
public abstract void m1();
public void m2();
}
and there is no compilation error
Yes a constructor can be private, to make any class as Singleton we need declare private constructor. A class who have private constructor can initialized just once.
sir, all my doubts are now vanished away! thanks for this wonderful “free” material…
Advice your friends also to avail the subject of this site.
Nice for your thanks. Advice your friends also to use the site.
Hello Sir,
Your tutorial is simple, awesome, in great detail, easy to understand for novice & newbies like me, Could you please include advanced java concepts also.
From my side there is no negative comment to make on your material, the only request i can do is, please keep the tutorial in sequential order and include advanced java concepts also.
Thank you,
Zakir.
Still site is under development. Core Java is not yet completed. Once completed, home page will be created and then it will be easy to navigate topic wise. Adv. Java takes a long time.