feat: adding vehicle classes and main program

The classes are on Vehicles folder and being used in Main.java file.
This commit is contained in:
2026-01-25 16:23:01 -05:00
commit 29d6b7c97e
13 changed files with 472 additions and 0 deletions

90
README.md Normal file
View File

@@ -0,0 +1,90 @@
# Java Classes
This project contains how Java classes can extend from a parent class and how to be implemented in different files.
The main class is `Main.java`, where the class Sport, SUV and Hybrid are being used and extend from Vehicle class.
## Diagram
```mermaid
classDiagram
class Vehicle {
-String make
-String model
+int doors
-int year
+EngineType typeOfEngine
+Vehicle(String make, String model, int year)
+EngineType getManualEngineType()
+EngineType getAutomaticEngineType()
+String getMake()
+EngineType getTypeOfEngine()
+int getDoors()
+String getModel()
+int getYear()
+String forward()
+String reverse()
+String stop()
}
class EngineType {
<<enumeration>>
AUTOMATIC
MANUAL
}
class SUV {
-boolean fourWheelDrive
+SUV(String make, String model, int year, boolean fourWheelDrive)
+boolean hasFourWheelDrive()
+String forward()
+String reverse()
+String stop()
+String engageFourWheelDrive()
}
class Sport {
-int topSpeed
-GearNumbers gear
+Sport(String make, String model, int year, int topSpeed)
-GearNumbers setGear(int gear)
+double getTopSpeed()
+String forward()
+String reverse()
+String stop()
+String drift()
+String nitroBoost()
+void changeGearUp()
+GearNumbers getGear()
+void changeGearDown()
+void setGearToNeutral()
}
class GearNumbers {
<<enumeration>>
R
N
GEAR_1
GEAR_2
GEAR_3
GEAR_4
GEAR_5
GEAR_6
}
class Hybrid {
-double batteryCapacity
+Hybrid(String make, String model, int year, double batteryCapacity)
+double getBatteryCapacity()
+String forward()
+String reverse()
+String stop()
}
Vehicle <|-- SUV
Vehicle <|-- Sport
Vehicle <|-- Hybrid
Vehicle *-- EngineType
Sport *-- GearNumbers
```

BIN
src/Main.class Normal file

Binary file not shown.

79
src/Main.java Normal file
View File

@@ -0,0 +1,79 @@
import Vehicles.*;
public class Main {
public static void main(String[] args) {
int HybridBatteryCapacity = 100;
int SportTopSpeed = 205;
boolean SUVFourWheelDrive = true;
int hybridYear = 2020;
int sportYear = 2019;
int suvYear = 2021;
String hybridMake = "Toyota";
String sportMake = "Ferrari";
String suvMake = "Jeep";
String hybridModel = "Prius";
String sportModel = "488 GTB";
String suvModel = "Grand Cherokee";
Hybrid myHybrid = new Hybrid(hybridMake, hybridModel, hybridYear, HybridBatteryCapacity);
Sport mySport = new Sport(sportMake, sportModel, sportYear, SportTopSpeed);
SUV mySUV = new SUV(suvMake, suvModel, suvYear, SUVFourWheelDrive);
Vehicle myVehicle = new Vehicle("Generic", "Model", 2000);
System.out.println("=== Generic Vehicle ===");
System.out.println("Make by: " + myVehicle.getMake());
System.out.println("Model: " + myVehicle.getModel());
System.out.println("Year: " + myVehicle.getYear());
System.out.println("Type of engine: " + myVehicle.getTypeOfEngine());
System.out.println(myVehicle.forward());
System.out.println(myVehicle.reverse());
System.out.println(myVehicle.stop());
System.out.println("\n=== Hybrid Vehicle ===");
System.out.println("Make by: " + myHybrid.getMake());
System.out.println("Model: " + myHybrid.getModel());
System.out.println("Year: " + myHybrid.getYear());
System.out.println(myHybrid.forward());
System.out.println(myHybrid.reverse());
System.out.println(myHybrid.stop());
System.out.println("Battery remaining: " + myHybrid.getBatteryCapacity());
System.out.println("\n=== Sport Vehicle ===");
System.out.println("Make by: " + mySport.getMake());
System.out.println("Model: " + mySport.getModel());
System.out.println("Year: " + mySport.getYear());
System.out.println(mySport.forward());
System.out.println(mySport.reverse());
System.out.println(mySport.stop());
System.out.println(mySport.drift());
System.out.println("Speed: " + mySport.getTopSpeed());
System.out.println(mySport.forward());
System.out.println("Gear on: " + mySport.getGear());
System.out.println("Speed: " + mySport.getTopSpeed());
mySport.changeGearUp();
System.out.println("Gear on: " + mySport.getGear());
System.out.println("Speed: " + mySport.getTopSpeed());
mySport.changeGearUp();
System.out.println("Gear on: " + mySport.getGear());
System.out.println("Speed: " + mySport.getTopSpeed());
System.out.println(mySport.drift());
mySport.changeGearDown();
System.out.println("Gear on: " + mySport.getGear());
System.out.println("Speed: " + mySport.getTopSpeed());
System.out.println(mySport.nitroBoost());
System.out.println("Speed: " + mySport.getTopSpeed());
mySport.changeGearDown();
System.out.println("Gear on: " + mySport.getGear());
System.out.println("Speed: " + mySport.getTopSpeed());
mySport.setGearToNeutral();
System.out.println("Gear on: " + mySport.getGear());
System.out.println("\n=== SUV Vehicle ===");
System.out.println("Make by: " + mySUV.getMake());
System.out.println("Model: " + mySUV.getModel());
System.out.println("Year: " + mySUV.getYear());
System.out.println(mySUV.forward());
System.out.println(mySUV.reverse());
System.out.println("4X4?: " + mySUV.hasFourWheelDrive());
}
}

BIN
src/Vehicles/Hybrid.class Normal file

Binary file not shown.

29
src/Vehicles/Hybrid.java Normal file
View File

@@ -0,0 +1,29 @@
package Vehicles;
public class Hybrid extends Vehicle {
private double batteryCapacity; // in kWh
public Hybrid(String make, String model, int year, double batteryCapacity) {
super(make, model, year);
this.batteryCapacity = batteryCapacity;
}
public double getBatteryCapacity() {
return batteryCapacity;
}
@Override
public String forward() {
return "The hybrid vehicle is moving forward using both engine and electric power.";
}
@Override
public String reverse() {
return "The hybrid vehicle is moving reverse using electric power.";
}
@Override
public String stop() {
return "The hybrid vehicle is stopping smoothly.";
}
}

BIN
src/Vehicles/SUV.class Normal file

Binary file not shown.

37
src/Vehicles/SUV.java Normal file
View File

@@ -0,0 +1,37 @@
package Vehicles;
public class SUV extends Vehicle {
private boolean fourWheelDrive;
public SUV(String make, String model, int year, boolean fourWheelDrive) {
super(make, model, year);
this.fourWheelDrive = fourWheelDrive;
}
public boolean hasFourWheelDrive() {
return fourWheelDrive;
}
@Override
public String forward() {
return "The SUV is moving forward steadily.";
}
@Override
public String reverse() {
return "The SUV is reversing carefully.";
}
@Override
public String stop() {
return "The SUV has come to a stop.";
}
public String engageFourWheelDrive() {
if (fourWheelDrive) {
return "Four-wheel drive engaged.";
} else {
return "This SUV does not have four-wheel drive.";
}
}
}

Binary file not shown.

BIN
src/Vehicles/Sport.class Normal file

Binary file not shown.

174
src/Vehicles/Sport.java Normal file
View File

@@ -0,0 +1,174 @@
package Vehicles;
public class Sport extends Vehicle {
private int topSpeed;
public enum GearNumbers {
R,
N,
GEAR_1,
GEAR_2,
GEAR_3,
GEAR_4,
GEAR_5,
GEAR_6
}
private GearNumbers gear;
public Sport(String make, String model, int year, int topSpeed) {
super(make, model, year);
this.topSpeed = topSpeed;
this.typeOfEngine = getManualEngineType();
this.doors = 2;
this.gear = this.setGear(0);
}
private GearNumbers setGear(int gear) {
switch (gear) {
case -1:
return GearNumbers.R;
case 0:
return GearNumbers.N;
case 1:
return GearNumbers.GEAR_1;
case 2:
return GearNumbers.GEAR_2;
case 3:
return GearNumbers.GEAR_3;
case 4:
return GearNumbers.GEAR_4;
case 5:
return GearNumbers.GEAR_5;
case 6:
return GearNumbers.GEAR_6;
default:
return GearNumbers.N;
}
}
public double getTopSpeed() {
if (this.gear == GearNumbers.N || this.gear == GearNumbers.R) {
return 0;
}
switch (this.gear) {
case GEAR_1:
return topSpeed * 0.2;
case GEAR_2:
return topSpeed * 0.35;
case GEAR_3:
return topSpeed * 0.5;
case GEAR_4:
return topSpeed * 0.65;
case GEAR_5:
return topSpeed * 0.8;
case GEAR_6:
return topSpeed;
default:
return 0;
}
}
@Override
public String forward() {
if (this.gear == GearNumbers.N) {
this.changeGearUp();
} else if (this.gear == GearNumbers.R) {
this.gear = this.setGear(1);
}
return "The sport vehicle is zooming forward at high speed!";
}
@Override
public String reverse() {
if (this.gear != GearNumbers.R) {
this.gear = this.setGear(-1);
}
return "The sport vehicle is reversing quickly!";
}
@Override
public String stop() {
if (this.gear != GearNumbers.N) {
this.setGearToNeutral();
}
return "The sport vehicle screeches to a halt!";
}
public String drift() {
if (this.gear == GearNumbers.N || this.gear == GearNumbers.R) {
return "Cannot drift while in Neutral or Reverse gear!";
}
return "The sport vehicle is drifting around the corner!";
}
public String nitroBoost() {
if (this.gear == GearNumbers.N || this.gear == GearNumbers.R) {
return "Cannot activate nitro boost while in Neutral or Reverse gear!";
}
if (this.gear != GearNumbers.GEAR_6) {
this.gear = this.setGear(6);
}
return "The sport vehicle activates nitro boost for extra speed!";
}
public void changeGearUp() {
switch (this.gear) {
case R:
this.gear = this.setGear(0);
break;
case N:
this.gear = this.setGear(1);
break;
case GEAR_1:
this.gear = this.setGear(2);
break;
case GEAR_2:
this.gear = this.setGear(3);
break;
case GEAR_3:
this.gear = this.setGear(4);
break;
case GEAR_4:
this.gear = this.setGear(5);
break;
case GEAR_5:
this.gear = this.setGear(6);
break;
}
}
public GearNumbers getGear() {
return this.gear;
}
public void changeGearDown() {
switch (this.gear) {
case GEAR_6:
this.gear = this.setGear(5);
break;
case GEAR_5:
this.gear = this.setGear(4);
break;
case GEAR_4:
this.gear = this.setGear(3);
break;
case GEAR_3:
this.gear = this.setGear(2);
break;
case GEAR_2:
this.gear = this.setGear(1);
break;
case GEAR_1:
this.gear = this.setGear(1);
break;
case N:
this.gear = this.setGear(-1);
break;
}
}
public void setGearToNeutral() {
this.gear = GearNumbers.N;
}
}

Binary file not shown.

BIN
src/Vehicles/Vehicle.class Normal file

Binary file not shown.

63
src/Vehicles/Vehicle.java Normal file
View File

@@ -0,0 +1,63 @@
package Vehicles;
public class Vehicle {
private String make;
private String model;
public int doors;
private int year;
public enum EngineType {
AUTOMATIC,
MANUAL
}
public EngineType typeOfEngine;
public Vehicle(String make, String model, int year) {
this.make = make;
this.model = model;
this.year = year;
this.typeOfEngine = EngineType.AUTOMATIC;
this.doors = 4;
}
public EngineType getManualEngineType() {
return EngineType.MANUAL;
}
public EngineType getAutomaticEngineType() {
return EngineType.AUTOMATIC;
}
public String getMake() {
return make;
}
public EngineType getTypeOfEngine() {
return typeOfEngine;
}
public int getDoors() {
return doors;
}
public String getModel() {
return model;
}
public int getYear() {
return year;
}
public String forward() {
return "The vehicle is moving forward.";
}
public String reverse() {
return "The vehicle is moving reverse.";
}
public String stop() {
return "The vehicle has stopped.";
}
}