How can we create object for abstract class?
- Every abstract class need extension(Child class).
- Extended class must override(implement body) for abstract methods.
- By instantiating Child class, we can access Parent(abstract) class functionality.
abstract class Parent
{
void m1()
{
System.out.println("Parent class concrete m1()");
}
abstract void m2();
}
class Child extends Parent
{
void m2() // override
{
System.out.println("Overridden m2() method of Abstract class");
}
}
class Test
{
public static void main(String args[])
{
Child obj = new Child();
obj.m1();
obj.m2();
}
}
How can we access non-static members of abstract class?
- Static members can access directly using class name.
- Non static members must be accessed using object address.
- Abstract class cannot be instantiated directly.
- By creating Child class object, we can access Parent(abstract) functionality.
Note: When any Child class of abstract class is unable to override all the specifications(abstract methods) become another abstract class.
abstract class Vehicle
{
void fuel()
{
System.out.println("fuel....");
}
abstract void ac();
abstract void pow_wind();
}
abstract class Car extends Vehicle
{
void ac()
{
System.out.println("ac.....");
}
}
class Swift extends Car
{
void pow_wind()
{
System.out.println("pow_windows....");
}
}
class Main
{
public static void main(String[] args)
{
Swift car = new Swift();
car.fuel();
car.ac();
car.pow_wind();
}
}
Object creation process in abstract classes:
- We can define constructors in abstract class.
- When we create object of Child class, abstract class constructor will be invoked automatically by using super() method
abstract class Parent
{
Parent()
{
System.out.println("Parent(abstract) class object creation...");
}
}
class Child extends Parent
{
Child()
{
// super();
System.out.println("Child's instantiation...");
}
}
class Main
{
public static void main(String[] args)
{
new Child();
}
}
Can we place non-static variables inside abstract class?
- Yes allowed.
- Instance variables get memory inside object.
- We can create object of abstract class through Child class.
- We can initialize the variables using super() method in object creation process.
import java.util.Scanner ;
abstract class Parent
{
int x;
Parent(int a)
{
this.x = a ;
}
abstract void details();
}
class Child extends Parent
{
int x ;
Child(int a, int b)
{
super(a);
this.x = b ;
}
void details()
{
System.out.println("Parent's x value : "+super.x);
System.out.println("Child's x value : "+this.x);
}
}
class Main
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.print("Enter Parent's x value : ");
int a = scan.nextInt();
System.out.print("Enter Child's x value : ");
int b = scan.nextInt();
Child obj = new Child(a, b);
obj.details();
}
}