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 :
|
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);
}
}
|
 |