Abstract class in Java is similar to interface except that it can contain default method implementation. An abstract class can have an abstract method without body and it can have methods with implementation also.
abstract keyword is used to create a abstract class and method. Abstract class in java can’t be instantiated. An abstract class is mostly used to provide a base for subclasses to extend and implement the abstract methods and override or use the implemented methods in abstract class.
Abstract Class in Java
Here is a simple example of Abstract Class in Java.
Copypackage com.journaldev.design; //abstract class public abstract class Person { private String name; private String gender; public Person(String nm, String gen){ this.name=nm; this.gender=gen; } //abstract method public abstract void work(); @Override public String toString(){ return "Name="+this.name+"::Gender="+this.gender; } public void changeName(String newName) { this.name = newName; } }
Notice that
work() is an abstract method and it has no-body. Here is a concrete class example extending an abstract class in java.
Copypackage com.journaldev.design; public class Employee extends Person { private int empId; public Employee(String nm, String gen, int id) { super(nm, gen); this.empId=id; } @Override public void work() { if(empId == 0){ System.out.println("Not working"); }else{ System.out.println("Working as employee!!"); } } public static void main(String args[]){ //coding in terms of abstract classes Person student = new Employee("Dove","Female",0); Person employee = new Employee("Pankaj","Male",123); student.work(); employee.work(); //using method implemented in abstract class - inheritance employee.changeName("Pankaj Kumar"); System.out.println(employee.toString()); } }
Note that subclass Employee inherits the properties and methods of superclass Person using inheritance in java.
Also notice the use of Override annotation in Employee class. Read more for why we should always use Override annotation when overriding a method.
Abstract class in Java Important Points
abstractkeyword is used to create an abstract class in java.
- Abstract class in java can’t be instantiated.
- We can use
abstractkeyword to create an abstract method, an abstract method doesn’t have body.
- If a class have abstract methods, then the class should also be abstract using abstract keyword, else it will not compile.
- It’s not necessary to have abstract class to have abstract method. We can mark a class as abstract even if it doesn’t declare any abstract methods.
- If abstract class doesn’t have any method implementation, its better to use interface because java doesn’t support multiple class inheritance.
- The subclass of abstract class in java must implement all the abstract methods unless the subclass is also an abstract class.
- All the methods in an interface are implicitly abstract unless the interface methods are static or default. Static methods and default methods in interfaces are added in Java 8, for more details read Java 8 interface changes.
- Java Abstract class can implement interfaces without even providing the implementation of interface methods.
- Java Abstract class is used to provide common method implementation to all the subclasses or to provide default implementation.
- We can run abstract class in java like any other class if it has
main()method.
That’s all for an abstract class in Java. If I missed anything important, please let us know through comments.
aryan says
what is the main role of abstract class in java?
Bhagyashri Chaudhari says
Does abstract class contains Constructor? If yes, then what is the use of it?
Frank says
Abstract classes cannot be instantiated, so they do not need constructors.
umakant chaudhary says
abstarct class have a constructer for instantiate child class object .
Deepak gupta says
you ain’t mentioned what’s the use of it.
Kenneth says
…”10. Java Abstract class is used to provide common method implementation to all the subclasses or to provide default implementation.” Did you even read the article?
Praveen says
The subclass of abstract class in java must implement all the abstract methods unless the subclass is also an abstract class.
On a similar note,
If Class3 extends abstract Class2
and abstract Class2 extends abstract Class1, then Class3 should implement all the abstract methods of Class1 and Class2. Class 2 need not implement methods of Class1 since Class2 is also abstract.
VIJAY says
Yes, if it class3 is not an abstract class.
Morteza says
Hi,
Thank you in advace for yout awsome tutorials and topis.
in the section of ‘Abstract class in Java Important Points’. point number 5 I guess is not correct. because to have an abstract method, its class must be abstract also.
If I`m wrong it would be greate to clear me.
Thanks
Pankaj says
You got it another way around, it says “It’s not necessary to have the abstract class to have abstract method.” That means we can mark a class as abstract even if it doesn’t have any abstract methods.
Alwin says
Nice bro
sathish says
It was a wonderful recap of what i learned java docs from various resources in internet. Thanks for covering entire picture of core java. God bless you!!
nirmala says
where is the Encapsulation and polymorphism in oops concept?
CHINTUL says
we can create a object for abstract class…
patil s says
No … We can not create object of abstract class.
It is anonymous object.
Fravashi Kaustav says
As it has been mentioned clearly, an abstract class can’t be instantiated, we can not create an object of it.
salman says
when to use abstract class and when to use interface?
James says
Confused. Where does “changeName” come from??
Pankaj says
While doing some editing, I mistakenly deleted changeName method from Person class, I have corrected it.
Yoganathan says
Why Abstract Class is used in Java?
I want to know the sole purpose of Abstract Class other than its providing Data hiding and forces the programmer to implement all the methods in Abstract class.
Pankaj says
you can have default implementation and abstract methods that you want all the implementation classes to implement. However with Java 8 default methods in interfaces, Interface and Abstract class are almost same.
Siva says
Abstract class points super
Stanley says
I feel like the Person, Employee relationship is better represented by an interface rather than an abstract class because a Person can be an Employee but it is not a necessity. A person can be more than one thing therefore A Person should implement an interface called Employee because they can also be something else like a manager or a supervisor.
Pankaj says
Every Employee “is a ” Person. So Person has to be superclass. It’s your choice whether you want to have it abstract class or interface. With Java 8 interface default and static methods, there is not much difference between abstract class and interface.
lahiru says
Hey could you please explain that ,
How do you use “employee.changeName(“Pankaj Kumar”);” ?
What is changeName ?
odelami emmanuel says
i need to submit this morning. i have working out my self but i am unable to define it.
define an interface that consists of methods that can operate on classes employee and student
shaurya gaurav mehta says
can i have more day to day life examoles on abstract class….
Aliasger Motiwala says
public interface LoginAuth{
public String encryptPassword(String pass);
public void checkDBforUser();
}
Now suppose you have 3 databases in your application. Then each and every implementation for that database needs to define the above 2 methods:
public class DBMySQL implements LoginAuth{
// Needs to implement both methods
}
public class DBOracle implements LoginAuth{
// Needs to implement both methods
}
public class DBAbc implements LoginAuth{
// Needs to implement both methods
}
But what if encryptPassword() is not database dependent, and it’s the same for each class? Then the above would not be a good approach.
Instead, consider this approach:
public abstract class LoginAuth{
public String encryptPassword(String pass){
// Implement the same default behavior here
// that is shared by all subclasses.
}
// Each subclass needs to provide their own implementation of this only:
public abstract void checkDBforUser();
}
Now in each child class, we only need to implement one method – the method that is database dependent.
Tried my best to make you understand.
Happy Learning 🙂
Rajesh says
Hi Pankaj,
Can u please tell me where we can use interfaces and abstract classes in realtime,could you please give me in realtime example.
manish says
Abstract class can’t be instantiated.
It is wrong what about anonymous class.
Yunus Atheist says
No. Abstract Classes cannot be instantiated.
Let us say we have got an abstract class absClass with one unimplemented abstract method doSayHello. When we implement doSayHello method in the curly brackets, we are doing it
under the pretence that we are extending an unnamed class but not by instantiating the abstract
class itself.
absClass ab = new absClass(){
@Override
public void doSayHello() {
System.out.println(“Hello World !”);
}
};
ab.doSayHello(); // prints “Hello World !”
kalanidhi says
Nice example for creating object for abstract class
Raghuveer Kurdi says
Abstract class can contain Constructor, if we cannot create an instance what is the use of this constructor.
Vishnu Prakash says
Yes, Abstract classes can have constructors unlike Interfaces. However we cannot directly instantiate an Abstract class to create an instance. The purpose of the Abstract class constructors (we can have multiple abstract class constructors with different arguments) is to initialize the final variables from subclasses (kind of lazy initialization)
Raj says
To Achieve Constructor Chaining Abstract Class Should have Constructor, though Object Cant be Created for it.
Every Java Class Will inherit From Object class.. So Even Abstract Class Will inherit From Object Class.
So If There is Inheritance between Classes then Constructor Chaining is Mandatory!!
Constructor Chaining means Sub Class Constructor Calling its Immediate Super Class Constructor.
vishnu says
can we override a non abstract method of abstract class . If yes then what is the use of making a method abstract in abstract class.
Firoj Mujawar says
1. abstract class can’t be instantiated
2. abstract class can contain definition of function
with respect to these features, my question is—
can we call those function which are defined in abstract class by reference of that class? if yes then why and how?
Pankaj says
You should have a concrete class extending the abstract class and provide implementation of abstract methods, you can also have anonymous class implementation. After that it’s just inheritance.
Firoj Mujawar says
abstract class MyAbstractClass {
public void definedMethod() {
System.out.println(“This is defined in Abstract Base Class”);
}
public abstract void declaredMethod();
}
class SubClass extends MyAbstractClass {
public void declaredMethod() {
System.out.println(“This is defined in Subclass of Abstract”);
}
}
public class AbstractMethodCall {
public static void main(String asds[]) {
MyAbstractClass abs=new SubClass();
abs.declaredMethod();
abs.definedMethod(); // here is the problem. how this is done??
}
}
Prashanth says
There is no problem in fact. SubClass extends MyAbstractClass. Hence, definedMethod() will also be available in MyAbstractClass. It calls the definedMethod() method and prints “This is defined in Abstract Base Class”
deepak says
This is is not showing parameter value . i have use Person student= new Employee(“Deepak”,”Male”,20);
Kapil says
There are two classes person and Employee. You have created the object of person class. Is it ok? and where is ‘changeName’ method?
Amit says
Nice tutorial, I think you have covered everything about abstract classes and methods.
Please provide some difference between abstract class and interface.
Aliasger Motiwala says
Methods of a Java interface are implicitly abstract and cannot have implementations. A Java abstract class can have instance methods that implements a default behaviour.
Variables declared in a Java interface are by default final. An abstract class may contain non-final variables.
Members of a Java interface are public by default. A Java abstract class can have the usual flavours of class members like private, protected, etc.
A.
Happy Learning 🙂