As name suggest, the abstract class serves as a land mark for the derived classes, where methods are expected to serve different or varieties of  requests An abstract  method can only reside within an abstract class. You just write the signature of the methods, and do not write methods body or implements the method. The child class will inherit an abstract class; abstract classes can't be instantiated..
  • By rule and practice, an abstract class is an incomplete class.
  •  Only abstract methods are declared in abstract classes. If a class that is not abstract and  contains an abstract method, an error occurs while compiling the java code.
  • abstract classes can't be instantiated, but can be extended by a subclasses.
The examples explain the following concepts :
  • The use of  Interface
  •  

import java.io.*;
import java.util.*;
//javac abstract_class_1.java
//this will not compile
class abstract_class_1
{
interface team
{
String method_1(String str);
String method_2(String str);
}
//abstract class A : team
//The abstract methods can only be created in an abstract class; reverse is not true.
//an abstract class can have nay kind of method
abstract class A implements team
{
public abstract String method_1(String str);
public abstract String method_2(String str);
}
//class B : A
class B extends A
{
//public override String method_1(String str){ System.out.println(" Hello : " + str); return str;}
public String method_1(String str){ System.out.println(" Hello : " + str); return str;}
//public override String method_2(String str){ System.out.println(" Hello : " + str); return str ;}
public String method_2(String str){ System.out.println(" Hello : " + str); return str ;}

}
class abstract_class_test extends B
{
public static void main(String args[])throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String str ="";
System.out.println("Player for team 1 : ");
String s1 = br.readLine();
System.out.println("Player for team 2 : ");
String s2 = br.readLine();
B b = new B();
b.method_1(s1);
b.method_2(s2);

}
}
}

The flaw in the above classes are the followings
  • inner class can't have a static method
  • if you are switching from C#, the override key word is not used in java.
 

import java.io.*;
import java.util.*;
//javac abstract_class_1.java
interface team
{
String method_1(String str);
String method_2(String str);
}
//abstract class A : team
//note the error when a method is abstract and class in not an abstract
abstract class A implements team
{
public abstract String method_1(String str);
public abstract String method_2(String str);
}
//with C# to inherit a class, java inherits a class with extend key words
//class B : A
class B extends A
{
//public override String method_1(String str){ System.out.println(" Hello : " + str); return str;}
public String method_1(String str){ System.out.println(" Hello : " + str); return str;}
//public override String method_2(String str){ System.out.println(" Hello : " + str); return str ;}
public String method_2(String str){ System.out.println(" Hello : " + str); return str ;}
}

class abstract_class_1 extends B
{
public static void main(String args[])throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String str ="";
System.out.println("Player for team 1 : ");
String s1 = br.readLine();
System.out.println("Player for team 2 : ");
String s2 = br.readLine();
B b = new B();
b.method_1(s1);
b.method_2(s2);

}
}

 

 

import java.io.*;
import java.util.*;
//javac abstract_class_2.java

abstract class team
{
public abstract String method_1(String str);
public abstract String method_2(String str);
}
//class B : A
class B extends team
{
//public override String method_1(String str){ System.out.println(" Hello : " + str); return str;}
public String method_1(String str){ System.out.println(" Hello : " + str); return str;}
//public override String method_2(String str){ System.out.println(" Hello : " + str); return str ;}
public String method_2(String str){ System.out.println(" Hello : " + str); return str ;}

}
class C extends team
{
//public override String method_1(String str){ System.out.println(" Hello : " + str); return str;}
public String method_1(String str){ System.out.println(" Hello : " + str); return str;}
//public override String method_2(String str){ System.out.println(" Hello : " + str); return str ;}
public String method_2(String str){ System.out.println(" Hello : " + str); return str ;}

}
class abstract_class_2
{
public static void main(String args[])throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String str ="";
System.out.println("Player for team 1 : ");
String s1 = br.readLine();
System.out.println("Player for team 2 : ");
String s2 = br.readLine();
B b = new B();
b.method_1(s1);
b.method_2(s2);
System.out.println("Coach's name for team 1 : ");
s1 = br.readLine();
System.out.println("Asst. Coach for team 2 : ");
s2 = br.readLine();
C c = new C();
c.method_1(s1);
c.method_2(s2);

}
}

import java.io.*;
import java.util.*;
//javac abstract_class_3.java
abstract class team
{
public abstract void method_1(String str);
public abstract void method_2(String str);
}
//class B : A
class Bvoid extends team
{
//public override String method_1(String str){ System.out.println(" Hello : " + str); return str;}
public void method_1(String str){ System.out.println(" Hello : " + str); }
//public override String method_2(String str){ System.out.println(" Hello : " + str); return str ;}
public void method_2(String str){ System.out.println(" Hello : " + str); }
}
class Cvoid extends team
{
//public override String method_1(String str){ System.out.println(" Hello : " + str); }
public void method_1(String str){ System.out.println(" Hello coach: " + str); }
//public override String method_2(String str){ System.out.println(" Hello : " + str); }
public void method_2(String str){ System.out.println(" Hello coach: " + str); }

}
class abstract_class_3
{
public static void main(String args[])throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String str ="";
System.out.println("Player for team 1 : ");
String s1 = br.readLine();
System.out.println("Player for team 2 : ");
String s2 = br.readLine();
Bvoid b = new Bvoid();
b.method_1(s1);
b.method_2(s2);
System.out.println("Coach's name for team 1 : ");
s1 = br.readLine();
System.out.println("Asst. Coach for team 2 : ");
s2 = br.readLine();
Cvoid c = new Cvoid();
c.method_1(s1);
c.method_2(s2);
}
}
 

In this example, we just use simple methods in a class declared as an abstract so that it can be inherited, but can't be instantiated.

import java.io.*;
import java.util.*;
//javac abstract_class_3C.java

abstract class team_c
{
//public abstract void method_1(String str);
//public abstract void method_2(String str);
abstract void method_1(String str);
abstract void method_2(String str);
}
//class B : A
class Bvoid_c extends team_c
{
//public override String method_1(String str){ System.out.println(" Hello : " + str); return str;}
void method_1(String str){ System.out.println(" Hello : " + str); }
//public override String method_2(String str){ System.out.println(" Hello : " + str); return str ;}
void method_2(String str){ System.out.println(" Hello : " + str); }

}
class Cvoid_c extends team_c
{
//public override String method_1(String str){ System.out.println(" Hello : " + str); }
void method_1(String str){ System.out.println(" Hello coach: " + str); }
//public override String method_2(String str){ System.out.println(" Hello : " + str); }
void method_2(String str){ System.out.println(" Hello coach: " + str); }

}
class abstract_class_3C
{
public static void main(String args[])throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String str ="";
System.out.println("Player for team_c 1 : ");
String s1 = br.readLine();
System.out.println("Player for team_c 2 : ");
String s2 = br.readLine();
Bvoid_c b = new Bvoid_c();
b.method_1(s1);
b.method_2(s2);
System.out.println("Coach's name for team_c 1 : ");
s1 = br.readLine();
System.out.println("Asst. Coach for team_c 2 : ");
s2 = br.readLine();
Cvoid_c c = new Cvoid_c();
c.method_1(s1);
c.method_2(s2);

}
}