diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..ac02af2
Binary files /dev/null and b/.DS_Store differ
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..ab1f416
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..a20905f
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..fb60291
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..8306744
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/lab-java-interfaces-and-abstract-classes.iml b/lab-java-interfaces-and-abstract-classes.iml
new file mode 100644
index 0000000..c90834f
--- /dev/null
+++ b/lab-java-interfaces-and-abstract-classes.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task1/BigDecimal.class b/out/production/lab-java-interfaces-and-abstract-classes/Task1/BigDecimal.class
new file mode 100644
index 0000000..9bd47f7
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task1/BigDecimal.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task1/Main.class b/out/production/lab-java-interfaces-and-abstract-classes/Task1/Main.class
new file mode 100644
index 0000000..ee15792
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task1/Main.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/Car.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Car.class
new file mode 100644
index 0000000..29b3343
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Car.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/Drivable.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Drivable.class
new file mode 100644
index 0000000..17ac5d0
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Drivable.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/Main.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Main.class
new file mode 100644
index 0000000..1bf141a
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Main.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/Sedan.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Sedan.class
new file mode 100644
index 0000000..8a5df08
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Sedan.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/Truck.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Truck.class
new file mode 100644
index 0000000..ea6ed75
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/Truck.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task2/UtilityVehicle.class b/out/production/lab-java-interfaces-and-abstract-classes/Task2/UtilityVehicle.class
new file mode 100644
index 0000000..c253f8c
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task2/UtilityVehicle.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task3/Main.class b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Main.class
new file mode 100644
index 0000000..d88cde3
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Main.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task3/Movie.class b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Movie.class
new file mode 100644
index 0000000..e644ae0
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Movie.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task3/Playable.class b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Playable.class
new file mode 100644
index 0000000..c93d790
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Playable.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task3/TvSeries.class b/out/production/lab-java-interfaces-and-abstract-classes/Task3/TvSeries.class
new file mode 100644
index 0000000..7445e1a
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task3/TvSeries.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task3/Video.class b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Video.class
new file mode 100644
index 0000000..8591621
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task3/Video.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntArrayList.class b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntArrayList.class
new file mode 100644
index 0000000..50968e5
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntArrayList.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntList.class b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntList.class
new file mode 100644
index 0000000..e8746ec
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntList.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntVector.class b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntVector.class
new file mode 100644
index 0000000..ec27fa4
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task4/IntVector.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task4/Main.class b/out/production/lab-java-interfaces-and-abstract-classes/Task4/Main.class
new file mode 100644
index 0000000..9a31a8c
Binary files /dev/null and b/out/production/lab-java-interfaces-and-abstract-classes/Task4/Main.class differ
diff --git a/out/production/lab-java-interfaces-and-abstract-classes/Task4/README.md b/out/production/lab-java-interfaces-and-abstract-classes/Task4/README.md
new file mode 100644
index 0000000..7c5cbb6
--- /dev/null
+++ b/out/production/lab-java-interfaces-and-abstract-classes/Task4/README.md
@@ -0,0 +1,16 @@
+# Task 4 - IntList
+
+## Efficiency Comparison
+
+IntArrayList is more efficient when:
+- Memory usage is important
+- The list does not grow very quickly
+- Fewer resizes are needed
+
+IntVector is more efficient when:
+- The list grows rapidly
+- Fewer resize operations are desired
+- Performance is more important than memory usage
+
+
+_Special Thanks! U can find More in_ [[**gholipourhadi.com**]()]
\ No newline at end of file
diff --git a/out/production/untitled/Task1/BigDecimal.class b/out/production/untitled/Task1/BigDecimal.class
new file mode 100644
index 0000000..9bd47f7
Binary files /dev/null and b/out/production/untitled/Task1/BigDecimal.class differ
diff --git a/out/production/untitled/Task1/Main.class b/out/production/untitled/Task1/Main.class
new file mode 100644
index 0000000..ee15792
Binary files /dev/null and b/out/production/untitled/Task1/Main.class differ
diff --git a/src/Task1/BigDecimal.java b/src/Task1/BigDecimal.java
new file mode 100644
index 0000000..b618084
--- /dev/null
+++ b/src/Task1/BigDecimal.java
@@ -0,0 +1,15 @@
+package Task1;
+
+import java.math.RoundingMode;
+
+public class BigDecimal {
+
+ public static double roundToHundredth(java.math.BigDecimal number) {
+ return number.setScale(2, RoundingMode.HALF_UP).doubleValue();
+ }
+
+ public static double reverseSignAndRoundToTenth(java.math.BigDecimal number) {
+ java.math.BigDecimal reversed = number.negate();
+ return reversed.setScale(1, RoundingMode.HALF_UP).doubleValue();
+ }
+}
\ No newline at end of file
diff --git a/src/Task1/Main.java b/src/Task1/Main.java
new file mode 100644
index 0000000..d510e07
--- /dev/null
+++ b/src/Task1/Main.java
@@ -0,0 +1,13 @@
+package Task1;
+
+public class Main {
+ public static void main(String[] args) {
+ java.math.BigDecimal num1 = new java.math.BigDecimal("4.2545");
+ java.math.BigDecimal num2 = new java.math.BigDecimal("1.2345");
+ java.math.BigDecimal num3 = new java.math.BigDecimal("-45.67");
+
+ System.out.println(BigDecimal.roundToHundredth(num1));
+ System.out.println(BigDecimal.reverseSignAndRoundToTenth(num2));
+ System.out.println(BigDecimal.reverseSignAndRoundToTenth(num3));
+ }
+}
\ No newline at end of file
diff --git a/src/Task2/Car.java b/src/Task2/Car.java
new file mode 100644
index 0000000..c24a2d9
--- /dev/null
+++ b/src/Task2/Car.java
@@ -0,0 +1,17 @@
+package Task2;
+
+public abstract class Car implements Drivable {
+ protected String vinNumber;
+ protected String make;
+ protected String model;
+ protected int mileage;
+
+ public Car(String vinNumber, String make, String model, int mileage) {
+ this.vinNumber = vinNumber;
+ this.make = make;
+ this.model = model;
+ this.mileage = mileage;
+ }
+
+ public abstract String getInfo();
+}
\ No newline at end of file
diff --git a/src/Task2/Drivable.java b/src/Task2/Drivable.java
new file mode 100644
index 0000000..2378887
--- /dev/null
+++ b/src/Task2/Drivable.java
@@ -0,0 +1,6 @@
+package Task2;
+
+public interface Drivable {
+ void startEngine();
+ void drive(int distance);
+}
\ No newline at end of file
diff --git a/src/Task2/Main.java b/src/Task2/Main.java
new file mode 100644
index 0000000..687a97a
--- /dev/null
+++ b/src/Task2/Main.java
@@ -0,0 +1,26 @@
+package Task2;
+
+public class Main {
+ public static void main(String[] args) {
+
+ Sedan sedan = new Sedan("111", "Toyota", "Camry", 50000);
+ UtilityVehicle uv = new UtilityVehicle("222", "Jeep", "Wrangler", 30000, true);
+ Truck truck = new Truck("333", "Ford", "F-150", 70000, 10000.5);
+
+ System.out.println(sedan.getInfo());
+ sedan.startEngine();
+ sedan.drive(100);
+
+ System.out.println();
+
+ System.out.println(uv.getInfo());
+ uv.startEngine();
+ uv.drive(200);
+
+ System.out.println();
+
+ System.out.println(truck.getInfo());
+ truck.startEngine();
+ truck.drive(300);
+ }
+}
\ No newline at end of file
diff --git a/src/Task2/Sedan.java b/src/Task2/Sedan.java
new file mode 100644
index 0000000..d6fd33e
--- /dev/null
+++ b/src/Task2/Sedan.java
@@ -0,0 +1,24 @@
+package Task2;
+
+public class Sedan extends Car {
+
+ public Sedan(String vinNumber, String make, String model, int mileage) {
+ super(vinNumber, make, model, mileage);
+ }
+
+ @Override
+ public String getInfo() {
+ return "Sedan: VIN=" + vinNumber + ", Make=" + make + ", Model=" + model + ", Mileage=" + mileage;
+ }
+
+ @Override
+ public void startEngine() {
+ System.out.println("Sedan engine started.");
+ }
+
+ @Override
+ public void drive(int distance) {
+ mileage += distance;
+ System.out.println("Sedan drove " + distance + " km. Total mileage: " + mileage);
+ }
+}
\ No newline at end of file
diff --git a/src/Task2/Truck.java b/src/Task2/Truck.java
new file mode 100644
index 0000000..b68785b
--- /dev/null
+++ b/src/Task2/Truck.java
@@ -0,0 +1,27 @@
+package Task2;
+
+public class Truck extends Car {
+ private double towingCapacity;
+
+ public Truck(String vinNumber, String make, String model, int mileage, double towingCapacity) {
+ super(vinNumber, make, model, mileage);
+ this.towingCapacity = towingCapacity;
+ }
+
+ @Override
+ public String getInfo() {
+ return "Truck: VIN=" + vinNumber + ", Make=" + make + ", Model=" + model + ", Mileage=" + mileage
+ + ", Towing Capacity=" + towingCapacity;
+ }
+
+ @Override
+ public void startEngine() {
+ System.out.println("Truck engine started.");
+ }
+
+ @Override
+ public void drive(int distance) {
+ mileage += distance;
+ System.out.println("Truck drove " + distance + " km. Total mileage: " + mileage);
+ }
+}
\ No newline at end of file
diff --git a/src/Task2/UtilityVehicle.java b/src/Task2/UtilityVehicle.java
new file mode 100644
index 0000000..1e20f6d
--- /dev/null
+++ b/src/Task2/UtilityVehicle.java
@@ -0,0 +1,27 @@
+package Task2;
+
+public class UtilityVehicle extends Car {
+ private boolean fourWheelDrive;
+
+ public UtilityVehicle(String vinNumber, String make, String model, int mileage, boolean fourWheelDrive) {
+ super(vinNumber, make, model, mileage);
+ this.fourWheelDrive = fourWheelDrive;
+ }
+
+ @Override
+ public String getInfo() {
+ return "UtilityVehicle: VIN=" + vinNumber + ", Make=" + make + ", Model=" + model + ", Mileage=" + mileage
+ + ", 4WD=" + fourWheelDrive;
+ }
+
+ @Override
+ public void startEngine() {
+ System.out.println("UtilityVehicle engine started.");
+ }
+
+ @Override
+ public void drive(int distance) {
+ mileage += distance;
+ System.out.println("UtilityVehicle drove " + distance + " km. Total mileage: " + mileage);
+ }
+}
\ No newline at end of file
diff --git a/src/Task3/Main.java b/src/Task3/Main.java
new file mode 100644
index 0000000..a0257a1
--- /dev/null
+++ b/src/Task3/Main.java
@@ -0,0 +1,19 @@
+package Task3;
+
+public class Main {
+ public static void main(String[] args) {
+
+ TvSeries series = new TvSeries("Breaking Bad", 50, 62);
+ Movie movie = new Movie("Seven Samurai", 148, 8.8);
+
+ System.out.println(series.getInfo());
+ series.play();
+ series.pause();
+
+ System.out.println();
+
+ System.out.println(movie.getInfo());
+ movie.play();
+ movie.pause();
+ }
+}
\ No newline at end of file
diff --git a/src/Task3/Movie.java b/src/Task3/Movie.java
new file mode 100644
index 0000000..4b052d8
--- /dev/null
+++ b/src/Task3/Movie.java
@@ -0,0 +1,26 @@
+package Task3;
+
+public class Movie extends Video {
+
+ private double rating;
+
+ public Movie(String title, int duration, double rating) {
+ super(title, duration);
+ this.rating = rating;
+ }
+
+ @Override
+ public String getInfo() {
+ return "Movie: " + super.getInfo() + ", Rating=" + rating;
+ }
+
+ @Override
+ public void play() {
+ System.out.println("Playing Movie: " + title);
+ }
+
+ @Override
+ public void pause() {
+ System.out.println("Pausing Movie: " + title);
+ }
+}
\ No newline at end of file
diff --git a/src/Task3/Playable.java b/src/Task3/Playable.java
new file mode 100644
index 0000000..d3464df
--- /dev/null
+++ b/src/Task3/Playable.java
@@ -0,0 +1,6 @@
+package Task3;
+
+public interface Playable {
+ void play();
+ void pause();
+}
\ No newline at end of file
diff --git a/src/Task3/TvSeries.java b/src/Task3/TvSeries.java
new file mode 100644
index 0000000..eae752f
--- /dev/null
+++ b/src/Task3/TvSeries.java
@@ -0,0 +1,26 @@
+package Task3;
+
+public class TvSeries extends Video {
+
+ private int episodes;
+
+ public TvSeries(String title, int duration, int episodes) {
+ super(title, duration);
+ this.episodes = episodes;
+ }
+
+ @Override
+ public String getInfo() {
+ return "TvSeries: " + super.getInfo() + ", Episodes=" + episodes;
+ }
+
+ @Override
+ public void play() {
+ System.out.println("Playing TV Series: " + title);
+ }
+
+ @Override
+ public void pause() {
+ System.out.println("Pausing TV Series: " + title);
+ }
+}
\ No newline at end of file
diff --git a/src/Task3/Video.java b/src/Task3/Video.java
new file mode 100644
index 0000000..b29912f
--- /dev/null
+++ b/src/Task3/Video.java
@@ -0,0 +1,16 @@
+package Task3;
+
+public abstract class Video implements Playable {
+
+ protected String title;
+ protected int duration;
+
+ public Video(String title, int duration) {
+ this.title = title;
+ this.duration = duration;
+ }
+
+ public String getInfo() {
+ return "Title=" + title + ", Duration=" + duration + " min";
+ }
+}
\ No newline at end of file
diff --git a/src/Task4/IntArrayList.java b/src/Task4/IntArrayList.java
new file mode 100644
index 0000000..8ae71d9
--- /dev/null
+++ b/src/Task4/IntArrayList.java
@@ -0,0 +1,37 @@
+package Task4;
+
+public class IntArrayList implements IntList {
+
+ private int[] data;
+ private int size;
+
+ public IntArrayList() {
+ data = new int[10];
+ size = 0;
+ }
+
+ @Override
+ public void add(int number) {
+ if (size == data.length) {
+ int newLength = data.length + data.length / 2;
+ int[] newData = new int[newLength];
+
+ for (int i = 0; i < data.length; i++) {
+ newData[i] = data[i];
+ }
+
+ data = newData;
+ }
+
+ data[size] = number;
+ size++;
+ }
+
+ @Override
+ public int get(int id) {
+ if (id < 0 || id >= size) {
+ throw new IndexOutOfBoundsException("Invalid index");
+ }
+ return data[id];
+ }
+}
\ No newline at end of file
diff --git a/src/Task4/IntList.java b/src/Task4/IntList.java
new file mode 100644
index 0000000..6e13c6a
--- /dev/null
+++ b/src/Task4/IntList.java
@@ -0,0 +1,6 @@
+package Task4;
+
+public interface IntList {
+ void add(int number);
+ int get(int id);
+}
\ No newline at end of file
diff --git a/src/Task4/IntVector.java b/src/Task4/IntVector.java
new file mode 100644
index 0000000..74742ac
--- /dev/null
+++ b/src/Task4/IntVector.java
@@ -0,0 +1,37 @@
+package Task4;
+
+public class IntVector implements IntList {
+
+ private int[] data;
+ private int size;
+
+ public IntVector() {
+ data = new int[20];
+ size = 0;
+ }
+
+ @Override
+ public void add(int number) {
+ if (size == data.length) {
+ int newLength = data.length * 2;
+ int[] newData = new int[newLength];
+
+ for (int i = 0; i < data.length; i++) {
+ newData[i] = data[i];
+ }
+
+ data = newData;
+ }
+
+ data[size] = number;
+ size++;
+ }
+
+ @Override
+ public int get(int id) {
+ if (id < 0 || id >= size) {
+ throw new IndexOutOfBoundsException("Invalid index");
+ }
+ return data[id];
+ }
+}
\ No newline at end of file
diff --git a/src/Task4/Main.java b/src/Task4/Main.java
new file mode 100644
index 0000000..ee4ff86
--- /dev/null
+++ b/src/Task4/Main.java
@@ -0,0 +1,21 @@
+package Task4;
+
+public class Main {
+ public static void main(String[] args) {
+
+ IntList list1 = new IntArrayList();
+ IntList list2 = new IntVector();
+
+ for (int i = 1; i <= 15; i++) {
+ list1.add(i);
+ }
+
+ for (int i = 1; i <= 25; i++) {
+ list2.add(i);
+ }
+
+
+ System.out.println("IntArrayList index 10: " + list1.get(10));
+ System.out.println("IntVector index 20: " + list2.get(20));
+ }
+}
\ No newline at end of file
diff --git a/src/Task4/README.md b/src/Task4/README.md
new file mode 100644
index 0000000..7c5cbb6
--- /dev/null
+++ b/src/Task4/README.md
@@ -0,0 +1,16 @@
+# Task 4 - IntList
+
+## Efficiency Comparison
+
+IntArrayList is more efficient when:
+- Memory usage is important
+- The list does not grow very quickly
+- Fewer resizes are needed
+
+IntVector is more efficient when:
+- The list grows rapidly
+- Fewer resize operations are desired
+- Performance is more important than memory usage
+
+
+_Special Thanks! U can find More in_ [[**gholipourhadi.com**]()]
\ No newline at end of file