Files
WS-03-advanced-oop/src/main/java/org/Main.java
T

149 lines
4.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package org;
import org.model.*;
import org.behavior.*;
import org.util.*;
public class Main {
public static void main(String[] args) {
// ============================================================
// TODO 1:
// Create one instance of each vehicle type:
// - ElectricCar
// - GasCar
// - SportsCar
//
// Requirements:
// • Use the constructors you created in each class.
// • Provide realistic values (brand, model, year, mileage, etc.).
// • Store them in variables such as:
// ElectricCar tesla = new ElectricCar(...);
// ============================================================
ElectricCar tesla = new ElectricCar("Tesla", "Model S", 2023, 9000, 5, 100, 85);
GasCar toyota = new GasCar("Toyota", "Camry", 2020, 15000, 5, 60, "Gasoline");
SportsCar ferrari = new SportsCar("Ferrari", "SF90", 2024, 4000, 2, 70, "Premium", 2.5);
// ============================================================
// TODO 2:
// Create an array of Vehicle:
// Vehicle[] vehicles = { ... };
//
// This array MUST contain the objects created above.
// This demonstrates **polymorphism** because all different
// subclasses (ElectricCar, GasCar, SportsCar) are stored
// as their parent type (Vehicle).
// ============================================================
Vehicle[] vehicles = {tesla, toyota, ferrari};
// ============================================================
// TODO 3:
// Loop through the Vehicle[] array and:
// • Call v.basicInfo();
// • Print a blank line after each.
//
// Purpose:
// Demonstrate that all subclasses share the same Vehicle
// behavior and can call inherited methods.
// ============================================================
for (Vehicle v : vehicles){
v.basicInfo();
System.out.println();
}
// ============================================================
// TODO 4:
// Use VehicleInspector to inspect each vehicle:
//
// VehicleInspector.inspect(v);
//
// Purpose:
// • Demonstrate the use of `instanceof`
// • Show subclassspecific inspection messages
// ============================================================
for (Vehicle v : vehicles){
VehicleInspector.inspect(v);
System.out.println();
}
// ============================================================
// TODO 5:
// Create an array of Serviceable:
// Serviceable[] serviceables = { ... };
//
// This demonstrates **interfacebased polymorphism**.
// Every Car subtype implements Serviceable.
//
// IMPORTANT:
// • You must cast to Vehicle when needed:
// Vehicle v = (Vehicle) s;
//
// ============================================================
Serviceable[] serviceables = {tesla, toyota, ferrari};
// ============================================================
// TODO 6:
// Loop through the Serviceable[] array:
//
// Steps inside loop:
//
// 1. Cast the current object to Vehicle:
// Vehicle v = (Vehicle) s;
//
// 2. Check:
// if (s.needsService(v)) { ... }
//
// 3. If true:
// - Print a message showing brand + model
// - Call s.performService();
//
// 4. Otherwise:
// - Print that the car does not need service
//
// Add blank lines between each item for readability.
// ============================================================
for (Serviceable s : serviceables){
Vehicle v = (Vehicle) s;
if (s.needsService(v)){
System.out.println(v.getBrand() + " " + v.getModel() + " needs service:");
s.performService();
}
else{
System.out.println(v.getBrand() + " " + v.getModel() + " does not need service.");
}
System.out.println();
}
// ============================================================
// TODO 7 (Optional):
// After everything is done, print a final message:
//
// System.out.println("=== Workshop Completed ===");
//
// ============================================================
System.out.println("=== Workshop Completed ===");
}
}