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.