Abstract in Java

May 2, 2017
Categorised in: Java Core
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.
Pratik Kataria is currently learning Springboot and Hibernate.
Technologies known and worked on: C/C++, Java, Python, JavaScript, HTML, CSS, WordPress, Angular, Ionic, MongoDB, SQL and Android.
Softwares known and worked on: Adobe Photoshop, Adobe Illustrator and Adobe After Effects.