From 29d6b7c97eae61535faa994513070dd857018039 Mon Sep 17 00:00:00 2001 From: Carlos Gutierrez Date: Sun, 25 Jan 2026 16:23:01 -0500 Subject: [PATCH] feat: adding vehicle classes and main program The classes are on Vehicles folder and being used in Main.java file. --- README.md | 90 +++++++++++++ src/Main.class | Bin 0 -> 3467 bytes src/Main.java | 79 ++++++++++++ src/Vehicles/Hybrid.class | Bin 0 -> 766 bytes src/Vehicles/Hybrid.java | 29 +++++ src/Vehicles/SUV.class | Bin 0 -> 863 bytes src/Vehicles/SUV.java | 37 ++++++ src/Vehicles/Sport$GearNumbers.class | Bin 0 -> 1380 bytes src/Vehicles/Sport.class | Bin 0 -> 2996 bytes src/Vehicles/Sport.java | 174 ++++++++++++++++++++++++++ src/Vehicles/Vehicle$EngineType.class | Bin 0 -> 1079 bytes src/Vehicles/Vehicle.class | Bin 0 -> 1346 bytes src/Vehicles/Vehicle.java | 63 ++++++++++ 13 files changed, 472 insertions(+) create mode 100644 README.md create mode 100644 src/Main.class create mode 100644 src/Main.java create mode 100644 src/Vehicles/Hybrid.class create mode 100644 src/Vehicles/Hybrid.java create mode 100644 src/Vehicles/SUV.class create mode 100644 src/Vehicles/SUV.java create mode 100644 src/Vehicles/Sport$GearNumbers.class create mode 100644 src/Vehicles/Sport.class create mode 100644 src/Vehicles/Sport.java create mode 100644 src/Vehicles/Vehicle$EngineType.class create mode 100644 src/Vehicles/Vehicle.class create mode 100644 src/Vehicles/Vehicle.java diff --git a/README.md b/README.md new file mode 100644 index 0000000..1c0737c --- /dev/null +++ b/README.md @@ -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 { + <> + 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 { + <> + 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 +``` diff --git a/src/Main.class b/src/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..f4d36221fb39ea163117edde78d74fd5199904b7 GIT binary patch literal 3467 zcmb_fSyUXy6}{CA^f0to8X?U{8hK2R!dSNOf-xQhk^r&DAlU&SAtg$hp@0^{^th)% zA&ZwRb`)oi<2A9f$9rNs0cVKq*ztCJPI7Ycm7n;>@j3ZP{_^XS_iDy;W9Inqk@*2A7px_#En{V8+fGhhkZDh#>X4nay&i#z z*5pJOVVW6tmL1OuBO;&=NY}MoI}Af0bX>|@7_|bGH@o&?K8$*jXz%Py4377PVG7g^ zx>j~N(KjbuXI@Gj+Xd<-1>kAcHDLOv~!T%VIoTi$8go1;H_Ub!VG{y9yfR>55JN?eCZ*-7)E+je5{|P2H}PqP%ecsUM-807 zNlIGMI=-BfCufdjXYDMV>M}ajhlAZxTx7wn2yVeAbc`7o$El66Qh81OELoXF()gic z77MYfj6)_WiYGc_U{YZ`Ilcb zSa=)5--r}fVlR^cCTEzOV{)E}ZQugt1x!Ms*YZ5+F85hED{Xtr3ebKNAuKSUDn0tk z_#Z}2V2AQR)$2wFqU=DF9f-06QFb884n*03C_ZaonGaJr?b8HhLo5oaLc3`89F8+ZT@3N*}F`2lCqJv}F7rr))fC?Tm|pEaT5 zVUEEMIjPTo^6P3HoC=HMjU5;F<0iA z3ShTkqiPR<#nL?&#JWrmD5>bPGMO>klU zRi>WO&FWOxtVvay+fos;E>&YTq>ME*PR8_Dq$#xf?o~9UwyhyL84Jg1nkx6KVppnm z4e`lXb2IC!hqL~0u7J!3 zo|sN)zIFw-1`QGK1`QFP4;mug^S3Vg!zF)s(I0-UfG>VvGq!Q>Z3>$&1y|RlS@g?{ zIeq^hawS#l7^}Q%3#v;Zm&%-Ft14LT8|6)z-!AE`TfujO_!IxVApXREKZrl^_xf9Z z;1BOB;30+OdMSw=^k;zTi;Ag=3P`7tqIW#eM(}M`gFP^iz&5ndY%A*M-C2*TVd5xB z+=A_}(1csDlWycFE+K{ou?vr5H~v67-=zBe8}{NKq~SfP@&BS(RMO+P2`wT)&*1~u zFFNQYJb2So_^X8y0vrY(dKbjTf!0TE*#bFL9g}*`m|@zuRV`r+8Y?u z{(>Rx9Sm##!Ex<<+*DDGk&5jYt!SaAUIl(exM=t}enH=B36&LUG{02zF-4zH^eIK3 lQS>*8KBwq!2>}om6?l=}UoRht;g5vStMvU7UMFN?{{s+HVOszI literal 0 HcmV?d00001 diff --git a/src/Main.java b/src/Main.java new file mode 100644 index 0000000..d033c7a --- /dev/null +++ b/src/Main.java @@ -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()); + } +} diff --git a/src/Vehicles/Hybrid.class b/src/Vehicles/Hybrid.class new file mode 100644 index 0000000000000000000000000000000000000000..38b3b23167f39c5088b284a7e9396001895b6516 GIT binary patch literal 766 zcma)3%TB^T6g|VMfG7{&56rluXkf3#g`!bo+(6h*%LrpiOQr?GSE-4{#DyQ=M;ULi zaRJ1bN$%XabI!T1&#(6n0O#1vB8IquL=H)$7z%CKQ??`hdgL&qj+Lu|6NXCV=3b0M z-4SlL-VC&IyGOH;E3=(J8W{uG92Ssc$p30yjxDV^6tP4QNIgCi17WLR%)lCHEHPZS zdXo1hC_ehBge#x-y%8njcb;#C~A^EUAhHTRtYFl2YP*rNr-X#b2X zt%$rN`AIC3U7=SE38d&=s_q|@-@vLHiB}lU6UJ&7N1UudCyhm9h_#0Gh+8I2M!(7G y3yjBKN@^0!k=?*%1l^`PgvLvYPgB4meQeDE=BI&c1l*njEKUQ%WIL24hVnP&qo_0h literal 0 HcmV?d00001 diff --git a/src/Vehicles/Hybrid.java b/src/Vehicles/Hybrid.java new file mode 100644 index 0000000..2708724 --- /dev/null +++ b/src/Vehicles/Hybrid.java @@ -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."; + } +} diff --git a/src/Vehicles/SUV.class b/src/Vehicles/SUV.class new file mode 100644 index 0000000000000000000000000000000000000000..766193d0050f761a122c7872e0a5f9782a739997 GIT binary patch literal 863 zcma))-)<5?6vn^d-@*#CU|X%VGHtzJQQ^)TjW=o&lj;qK33pR=U{{yjW_O|SQG5q4 zYN9dm!Uyo7jNed1LVICIhM6h4_ibd5wU8?#kAlEvUwi&A&`D>p z5hy(MLqB~c&}^Q(S2NWKR5g*=tWVKmV)jih3w=!{ji1a^-pTs;a+U4~Q&GtO%Fml{T zCo+su=_x`+{AyNP!1=$q3>=!zJ&#;k-Z=3?{bo8j)p1Xq28`6G(kjr7x%>PVyv?`1 z!uq^SF%7_00(W5$)5fHjXtrLtSOaUkxOWY>u@3GKY+M7@)N; literal 0 HcmV?d00001 diff --git a/src/Vehicles/SUV.java b/src/Vehicles/SUV.java new file mode 100644 index 0000000..ba91106 --- /dev/null +++ b/src/Vehicles/SUV.java @@ -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."; + } + } +} diff --git a/src/Vehicles/Sport$GearNumbers.class b/src/Vehicles/Sport$GearNumbers.class new file mode 100644 index 0000000000000000000000000000000000000000..0ff072003cc91a5db55979e9c50700fc59529be4 GIT binary patch literal 1380 zcmaJ>YflqF6g|_|ZkIvUB1j8bL4+2N@)m8y0+xr?LRf9mXkwPKLP^=`cFSk~j^DH- zLNppa`=g9^hMJb3ZPK1SXYbs(d**C^{r>h7Kn7U_9)?KXIw%#(RyAR~uQ=}Tx@9`K z+R?7%RD)pfarhBnU^@&0+5gujMX|~el*Kv0Iykssf%VMt&f94rUE}C#N;5*b&Jk)# zvqHMT(bJUXgmjamuPMz7DZg1>ODI}@yV`4*u;-l3u@D+E?G5DDn!xH@l zT8NFE;odpe)%rB8^;6rAphc7-c;(V4p_gtcW8(v-82>_-m-k7N z67DnE{ljrWI{6#os6-30~&M3k2f3Ie0@5L7BED4?P|6cDA=>aaVoE9(x-4xrY)G<_sZ z`k`sl)}~EOtE5dEsVOw+hkoztYd<$_zx1DI`#ZD4?g}RLCg;wXv-ke)Ilp_(nf>XX z?|%T$3nv#D$n+yiMK*j23dhWFBp5a0O`f8_cPJ8zI7bxJ*Y{sF=8dMP5u0inaqLKJ zs$;#SuVE|)0p$3Rt0E7of`TOG$c$w>3IdKbGcseEAq7fbE*BT5*nmO>8>dWXz=+Km z(caipBxa7@m@yS>t8eH}LU>9|YC(q_SFBN+Z1F?xmzkz2R~_jHMaY) zLq&~jDNhEsZYc>G&OtSHs;HBt%AmY8sL&Qv zs%TA_+QhU^#r~9OpP1TJJd-l*&!wqD#UUIfCzc(G#Ehtd%=(5tU+0e>%DC(6{B6=5 zzRus7Rvf<0zkZSNtFQC##2TTtPsJ&m<}C%o%pp@aJU8QFjRi2Epmj8CYH>*tZ9b8Q zS|qOBw5)5)HEq(e7YsY38IBf?Ooh3SDO4T6kb=4=ZnVvLUXN^@or?sgqc^I>iL)w( z#fd`ien+iAbI!4iXaJ)McCJT?2W`^~hRwLXdyc?>1Ye# zNYvCKG0lV1EL$6PJuo#%3hud}pm{w$Lv#_uQNy<8Vj;~T4?)Y0nX>Cy1&6(pjGz;l zHyl%AMcS4&VOjB~I{2c3_Vov^qQxJBBh8w5orHJ6_l{%*EJh1NL(r5vf^waQntdqf?Su7 zW5Nel5n6If!PfNFv97v0*qc(B*kdik2sC2N*+KI-?^0eQ7aPS91$l#J+!-+4l4lC{ z#dtg2Q6nBV<9^I4s7RLa`W{87RKp^ac;|HwR#$*M7?cd@m#)TE!lw!bh)bNG=i3=% z@eQcackQnF4vM}hYZ-oBUqSvdiuCMdY|{126>M2XBpimz;s2e>wP+-A$BM$^l9TrIXT4IYBx72-?yk)KcmxyC{v6 z7D^lC0Ht<`>oQz#bmUU6WMkTjHfU(ab~ct8bYUlYP>+*rZ2j2HSQ~MLEAx=koaqfZ zXkfx~_h*u!aKTIZx2WV1_mQ8_vU}}Y@K6U+s0Ccdq#)`!eqhhLXmoHR!6uVn2T6il zMv>?9eWv9K&J>TV#kokFODJF}2nWO|;J&FOPLGFEp2SIAs;~ImQt|ngp-Jd7iQxV5yzJj<^z&FdZEt?|GCsD2~w}}lxd!FjkOxXF3h;6Wh1jBLx|uf zjkA>KpWbnI1lP;I7igCuh15XVM>$Fvpo~*Y%51W57txoz-9;SM_3VUGi)hhx&%s61 z>bif`UZ(4TRXr^V=>Un;Ji`B0fWw-b=XZU933-F5f0MO#3uo~nFZX3$$}5cNHX^vg zRDBI|cpcaACM|EdvGTjwoac@lh8n?DFW@RZ<>s>`V4*G1bbPMyZO+q4ZvODNxt+$% zO?OA4GH0m^7s82fBOD1=4QcV6OpE(a8XwJRJk_M}wNyxyQ|FoK*YPs{sXgGe0Kl< literal 0 HcmV?d00001 diff --git a/src/Vehicles/Sport.java b/src/Vehicles/Sport.java new file mode 100644 index 0000000..0a81d8d --- /dev/null +++ b/src/Vehicles/Sport.java @@ -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; + } +} diff --git a/src/Vehicles/Vehicle$EngineType.class b/src/Vehicles/Vehicle$EngineType.class new file mode 100644 index 0000000000000000000000000000000000000000..fbde9e5998f7d8f4982cfebfb1b0aa79b40541a7 GIT binary patch literal 1079 zcmaJvj#`3H__qj)0)P~)2Eq~-uN;zw^>FG*cCu}f3F&Qz2($xG1MFy=g7|Kx)b z8xtS=0sbiCoTWmu6kg_>ne)weX1x4E4gTo?i!?K5YH7jKx397{KvJ0f>N z#-vCLcFYEEi^!CWIHoD@f@>B7D?~7Zq=W}DW--UG;QeCt&}ixguU?$fHU-VxpI0%B#Ky)u`G%RHcZp9MFlG|9tvovlrJCWi(#xXELB@v z>0NcK=(f@^d(@Y5YFb}3tC0=k@tqip_qb(q!lW5yhk06>t=Nuve$E?NhIIP2ZnqCClwW z<#T;n3_8c?C5Q}JmAsFH574QoKf%=XJ|uOck8w5CM@+p$qK|o1>Lc~tWmqS>1c_{n zvZfHB#hxJcX(TXDE47Ry@owPhfPIlpM(DsLlyBDzAvZQhHaiNL@FG)$%;6bXQL*p@ zXHfkC$qQYfr_F29Vd%UUx<=6FctO_7n)>P~RfzR+WC7z|R?+#^NY