Extending Classes and Super in Java

May 2, 2017
Categorised in: Java Core
Let’s Dive into the Code
Vehicle.java file in folder path: K:\Extending Classes and Overriding Methods\com\example\java
package com.example.java; import com.example.java.model.*; //This imports all the files in model folder import java.util.List; import java.util.ArrayList; public class Vehicle { public static void main( String[] args ){ List<Bike> bikes = new ArrayList<>(); //Instead of: //bikes.add(new Bike(Bike.HONDA, 0x2E0456, 1)); //We do this as Honda knows all the values: bikes.add(new Honda()); bikes.add(new Bike(Bike.YAMAHA, 0x2E0854, 1)); bikes.add(new Bike(Bike.YAMAHA, 0x2E0555, 1)); for(Bike b: bikes) { System.out.println(b.getName() +" " + b.getColor() + " " + b.getGearOrNot()); } } }
Bike.java file in folder path: K:\Extending Classes and Overriding Methods\com\example\java\model
package com.example.java.model; public class Bike { public static final String HONDA = "Honda"; public static final String YAMAHA = "Yamaha"; private String name = HONDA; private long color = 0x2E0456; private int gearOrNot = 1; //Let's forget to create the default constructor //public Bike() {} //does nothing but must be defined and public public Bike(String name, long color, int gearOrNot) { this.name = name; this.color = color; this.gearOrNot = gearOrNot; } public String getName() { return name; } public long getColor() { return color; } public int getGearOrNot() { return gearOrNot; } }
Honda.java file in folder path: K:\Extending Classes and Overriding Methods\com\example\java\model
package com.example.java.model; public class Honda extends Bike { //will give error. Need to define default constructor //public Honda() {} //will give error that still no default constructor exists public Honda() { super(Bike.HONDA, 0x2E0456, 1); } }
Execution
- javac com\example\java\model\Bike.java
- javac com\example\java\Vehicle.java
- java com.example.java.Vehicle
- Honda 3015766 1
- Yamaha 3016788 1
- Yamaha 3016021 1
Notes
- Instead of explicitly setting name, color and gearOrNot variable, we created a special subclass Honda.
- This subclass Honda already knows the values of name, color and gearOrNot.
- The subclass (Honda) expects a no argument constructor in superclass (Bike).
- Since, the no argument constructor does not exists, we need to create it explicitly in the subclass.
- If we just define an empty default constructor in subclass, we get error again.
- So we need to use the keyword ‘super’ to call a specific constructor from superclass.
- super() needs to be first keyword in the definition.
- This makes the code simpler and easier to read.
- Now if there is a change in color then it needs to be done in subclass only and it will be reflected everywhere the subclass is instantiated.
- Thus, subclass can contain specific information and override the default or set specific values which the superclass requires.
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.