Abstract in Java

Understanding through Code

Bike.java (abstract class)

package com.example.java.model;    public abstract class Bike {    	public static final String HONDA = "Honda";  	public static final String YAMAHA = "Yamaha";    	private String name = HONDA;  	private String color = "Red";  	private int gearOrNot = 1;    	public Bike(String name, String color, int gearOrNot) {  		this.name = name;   		this.color = color;  		this.gearOrNot = gearOrNot;  	}    	public String getName() { return name; }    	public String getColor() { return color; }    	public int getGearOrNot() { return gearOrNot; }    	public abstract String getLogo();    }

 Details.java

package com.example.java;    import java.util.List;  import com.example.java.model.Bike;    public interface Details {  	  	public void getDetails(List<Bike> bikes);    	public void setColor(String color);    }

 VehicleTypes.java

package com.example.java;    //FOr demonstrating instance method  import java.util.List;  import com.example.java.model.Bike;    public class VehicleTypes implements Details {    	private String colorChoice;    	public void getDetails(List<Bike> bikes) {   		String colorChoiceOfCustomer = colorChoice;    		for(Bike b: bikes) {  		 	System.out.println(b.getName() +" " + b.getColor() + " " + b.getGearOrNot());  		}    		System.out.println("Color choice is: " +colorChoiceOfCustomer);    	}    	public void setColor(String color) {  		colorChoice = color;  	}    }

 Honda.java

package com.example.java.model;    public class Honda extends Bike {    	public Honda() {  		super(Bike.HONDA, "Red", 1);  	}    	public String getLogo() {  		return "Find logo on google please...";  	}    }

 Vehicle.java

package com.example.java;    import com.example.java.model.*;	  import java.util.List;  import java.util.ArrayList;    public class Vehicle {  	public static void main( String[] args ){    		List<Bike> bikes = new ArrayList<>();    		bikes.add(new Honda());    		//Below line will produce error that bike is abstract and cannot be instantiated  		//bikes.add(new Bike(Bike.YAMAHA, "Black", 1));     		Details vt = new VehicleTypes();  		vt.setColor("White");  		vt.getDetails(bikes);  		System.out.println( (new Honda()).getLogo() );    	}  }

 Execution

  • K:\Abstract>javac com\example\java\model\Bike.java
  • K:\Abstract>javac com\example\java\Details.java
  • K:\Abstract>javac com\example\java\VehicleTypes.java
  • K:\Abstract>javac com\example\java\Vehicle.java
  • K:\Abstract>java com.example.java.Vehicle
  • Honda Red 1
  • Color choice is: White
  • Find logo on google please…

Notes

  • An abstract class is determined by the abstract keyword. It can contain combination of:
    • Fully implemented methods
    • Abstract methods
  • An abstract method is just like a method in an interface i.e. it does not have any implementation.
  • Any subclasses of an abstract class must implement that abstract method.
  • In above code, Bike is superclass for Honda. That is, Honda is subclass of Bike.
  • When we declared an abstract method after making the Bike class abstract:
    • public abstract String getLogo();
  • We get an error to either: (1) declare honda as abstract or (2) implement the abstract method.
  • Abstract classes cannot be instantiated directly. Only their subclasses can be instantiated.
  • Abstract is similar to interface. A programmer determines whether to use interface or abstract depending on application’s needs.