// Step 1: Create a superclass
class Vehicle {
protected String make;
private int year;
public Vehicle(String make, int year) {
[Link] = make;
[Link] = year;
}
public void drive() {
[Link]("Vehicle is being driven");
}
public void drive(String destination) {
[Link]("Vehicle is driving to the destination: " + destination);
}
public void drive(int distance) {
[Link]("Vehicle is driving for " + distance + " miles");
}
public final void printMake() {
[Link]("Make: " + make);
}
public void displayYear() {
[Link]("Vehicle year is: " + year);
}
}
// Step 2: Create a subclass with simple inheritance
class Car extends Vehicle {
private String model;
public Car(String make, String model, int year) {
super(make, year);
[Link] = model;
}
public void displayDetails() {
[Link]("Car Make: " + make + ", Model: " + model);
}
@Override
public void drive() {
[Link]("Car is being driven");
}
public void displayYear() {
[Link]();
[Link]("Car year is: " + [Link]);
}
}
// Step 3: Create a subclass with multilevel inheritance
class SportsCar extends Car {
public SportsCar(String make, String model, int year) {
super(make, model, year);
}
@Override
public void drive() {
[Link]("Sports car is being driven");
}
}
// Step 10: Run and test the program
public class InheritanceDemo {
public static void main(String[] args) {
Vehicle v = new Vehicle("Generic", 2020);
[Link]();
[Link]("Beach");
[Link](100);
Car c = new Car("Toyota", "Camry", 2021);
[Link]();
[Link]();
[Link]();
SportsCar sc = new SportsCar("Ferrari", "488", 2022);
[Link]();
// Step 6: Upcasting
Vehicle upcastedCar = new SportsCar("Lamborghini", "Huracan", 2023);
[Link]();
// Step 7: Dynamic method dispatch
Vehicle[] vehicles = {new Car("Honda", "Civic", 2021), new SportsCar("Bugatti", "Chiron
for (Vehicle vehicle : vehicles) {
[Link]();
}
}
}